C++ 在模板成员函数内调用非模板成员函数
运行以下程序时,我面临编译问题: 我在模板成员函数中调用非模板成员函数,但得到了奇怪的编译错误C++ 在模板成员函数内调用非模板成员函数,c++,templates,boost,shared-ptr,C++,Templates,Boost,Shared Ptr,运行以下程序时,我面临编译问题: 我在模板成员函数中调用非模板成员函数,但得到了奇怪的编译错误 #include <iostream> #include <boost\shared_ptr.hpp> class base { public: base() { } void fun2(boost::shared_ptr<int> &data) { std::cout << "T
#include <iostream>
#include <boost\shared_ptr.hpp>
class base
{
public:
base()
{
}
void fun2(boost::shared_ptr<int> &data)
{
std::cout << "This is fun2" << std::endl;
}
void fun3(boost::shared_ptr<double> &value)
{
std::cout << "This is fun3" << std::endl;
}
template <typename T>
void fun1(int switchParam,T &resonse)
{
std::cout << "This is fun1." << std::endl;
switch(switchParam)
{
case 0:
fun2(resonse);
break;
case 1:
fun3(resonse);
break;
}
}
};
void main()
{
boost::shared_ptr<int> myInt;
int switchParam = 0;
base b1;
b1.fun1(switchParam,myInt);
}
#包括
#包括
阶级基础
{
公众:
base()
{
}
void fun2(boost::共享存储和数据)
{
std::cout否。您不能这样做。对于任何类型的模板代码编译的第二阶段,开关
块必须由编译器完全编译。它将无法编译。您正在将模板
与程序的运行时行为混合。您最好编写一个不同的函数
请注意,switch
是运行时,而不是编译时
编译器仍然必须为int
完全编译它。它不会计算运行时switch
语句并消除fun3
,这需要shared\u ptr
fun3
需要一个指向double
的指针,您试图编译它时将一个指向int
的指针传递给它编译器不喜欢它。这有什么奇怪的?我想在fun1中传递不同的数据类型,但根据大小写条件,它应该相应地调用不同的函数。如果我不传递shared_ptr并使用int或double之类的默认数据类型,同样的工作是一样的。你知道编译时的类型,为什么不重载一个函数呢?这已经完成了与模板无关。您在未执行的代码分支中有一个类型错误,希望能够解决它。if(false){int a=“foo”;}
。不,不起作用。请重新设计您的逻辑。
Error 1 error C2664: 'base::fun3' : cannot convert parameter 1 from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T> &'