Creating a template method within a non-template class is a powerful feature in C++ that allows you to have generic functionality within a specific class.
This can be particularly useful when you want to provide flexibility for a single method without making the entire class a template.
Here's an example of how to create a template method in a non-template class:
#include <iostream>
#include <list>
#include <vector>
class DataProcessor {
public:
// Non-template method
void ProcessInt(int value) {
std::cout << "Processing int: "
<< value << '\n';
}
// Template method
template <typename T>
void ProcessGeneric(const T& value) {
std::cout << "Processing generic value: "
<< value << '\n';
}
// Template method with multiple parameters
template <typename T, typename Container>
void ProcessContainer(const Container& container) {
std::cout << "Processing container:\n";
for (const T& item : container) {
std::cout << " " << item << '\n';
}
}
};
int main() {
DataProcessor processor;
// Using non-template method
processor.ProcessInt(42);
// Using template methods
processor.ProcessGeneric(3.14);
processor.ProcessGeneric("Hello");
std::vector<int> vec = {1, 2, 3, 4, 5};
processor.ProcessContainer<int>(vec);
std::list<std::string> list = {
"apple", "banana", "cherry"
};
processor.ProcessContainer<std::string>(list);
}
Processing int: 42
Processing generic value: 3.14
Processing generic value: Hello
Processing container:
1
2
3
4
5
Processing container:
apple
banana
cherry
In this example, DataProcessor
is a non-template class, but it contains template methods. Here's what's happening:
ProcessInt
is a regular, non-template method that works specifically with int
.ProcessGeneric
is a template method that can work with any type. The type T
is deduced from the argument passed to the method.ProcessContainer
is a more complex template method that takes two template parameters: the type of elements in the container (T
) and the container type itself (Container
).When using template methods, you typically don't need to specify the template arguments explicitly - the compiler can deduce them from the function arguments.
However, in some cases (like with ProcessContainer
), you might need to specify some of the template arguments explicitly if they can't be deduced.
Some key points to remember:
Template methods in non-template classes provide a great way to add generic functionality to your classes without the need to make the entire class a template. This can lead to more flexible and reusable code.
Answers to questions are automatically generated and may not have been reviewed.
Learn how templates can be used to create multiple classes from a single blueprint