【发布时间】:2017-03-27 20:52:18
【问题描述】:
假设你有这样的课程:
template <typename T>
class MyClass {
public:
void doSomething();
};
在一个方法中,有没有办法根据类型有不同的行为:
template <typename T> MyClass::doSomething() {
//this is what I want:
std::string value = "17";
if(T == int) {
int myInt = atoi(value.c_str());
} else if(T == std::string) {
std::string myString = value;
}
}
有什么简单的方法可以做到这一点吗?
我知道我可以编写一个包装类来提供一个构造函数,该构造函数采用std::string,所以我可以使用类似的东西:
T myVar(value);
但是如果使用像 int 这样的简单类型会浪费更多的资源,我也想实现 if-else-statement 能够执行不同的操作。
我会很感激你的回答。 问候,
标签
【问题讨论】:
-
你不能使用模板专业化吗?
-
我没有想到这一点,但我担心使用模板规范可能会使该类仅可用于某些类型?我想尽可能保持灵活性
-
@tagelicht,特化比任何类型的
if都更灵活,因为您可以根据需要添加特化,并且可以添加部分特化以涵盖更复杂的类型集静态ifs。