我如何创建一个在自身内部使用模板但不在其参数中使用模板的函数?我有很多具有相同构造函数和函数的类,但在它们的构造函数中做不同的事情,所以我试图创建一个可以接受数字的函数(这是必要的)来告诉开关模板值应该成为哪个函数.我应该怎么做?
将模板放在函数中而不是模板化函数本身也不起作用
this 不工作
#include <iostream>
template <typename T> void function(uint8_t s, std::string str1, std::string str2, std::string str3){
T var;
switch (s){
case 1:
// var = class1();
break;
// case 2 ...
// case 3 ...
default:
break;
}
}
int main() {
std::string str = "01234567";
std::cout << function(1, str, str, str) << std::endl;
return 0;
}
最佳答案
您是否尝试过显式指定模板参数?
function<uint8_t>(1, str, str, str);
编辑:
不可能完全按照你的意愿去做,因为模板是在编译时解析的,但你的函数的参数是在运行时解析的。所以,在编译过程中,编译器不知道's'的值是什么。
出于您的目的,我认为工厂模式是合适的。 See Alexandrescu's factory method pattern .
示例用法:
typedef AbstractT* (*CreatorMethod)(std::string, std::string, std::string);
typedef Factory <AbstractT,uint8_t,CreatorMethod> TFactory;
TFactory tfact;
tfact.Register(1, &someCreatorMethod);
tfact.Register(2, &someOtherCreatorMethod);
std::string str = "01234567";
AbstracT* object = tfact.Create(1 str, str, str);
AbstracT* object = tfact.Create(2 str, str, str);
关于C++ 函数模板导致输入参数出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10826012/