C++ C++;函数模板导致输入参数出错
我如何创建一个在其自身中使用模板而不是在其参数中使用模板的函数?我有很多类具有相同的构造函数和函数,但是在它们的构造函数中做不同的事情,所以我尝试创建一个可以接受数字的函数(这是必要的),来告诉开关模板值应该成为哪个函数。我该怎么做 将模板放在函数中而不是模板化函数本身也不起作用 不起作用C++ C++;函数模板导致输入参数出错,c++,function,templates,c++11,arguments,C++,Function,Templates,C++11,Arguments,我如何创建一个在其自身中使用模板而不是在其参数中使用模板的函数?我有很多类具有相同的构造函数和函数,但是在它们的构造函数中做不同的事情,所以我尝试创建一个可以接受数字的函数(这是必要的),来告诉开关模板值应该成为哪个函数。我该怎么做 将模板放在函数中而不是模板化函数本身也不起作用 不起作用 #include <iostream> template <typename T> void function(uint8_t s, std::string str1, std::s
#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;
}
#包括
模板无效函数(uint8_t s,std::string str1,std::string str2,std::string str3){
T-var;
开关{
案例1:
//var=class1();
打破
//案例2。。。
//案例3。。。
违约:
打破
}
}
int main(){
std::string str=“01234567”;
std::cout您是否尝试过显式指定模板参数
function<uint8_t>(1, str, str, str);
函数(1,str,str,str);
编辑:
不可能完全按照您的要求执行,因为模板在编译时解析,但函数的参数在运行时解析。因此,在编译过程中,编译器不知道“s”的值是什么。
就你而言,我认为工厂模式是合适的
示例用法:
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);
typedef abstract*(*CreatorMethod)(std::string,std::string,std::string);
typedef工厂;
tfactactfactorytfact;
tfact.Register(1,&someCreatorMethod);
tfact.Register(2,&someOtherCreatorMethod);
std::string str=“01234567”;
抽象*object=tfact.Create(1个str,str,str);
抽象*object=tfact.Create(2个str,str,str);
我不确定您到底想做什么,但这是对您的代码的修复。您可能需要解释更多以获得更好的答案。使用函数(func参数)
指定无法推导的模板参数-请参阅@Jesse的示例。但不清楚您希望在//var=class1()时发生什么
.ah.oops.我忘记了
。不幸的是,这并不能解决我的问题。我事先不知道T
。我想我可以更改代码来实现这一点,但我更愿意在函数中找出T