C++ 调用模板基类的模板函数
可能重复:C++ 调用模板基类的模板函数,c++,templates,dependent-name,C++,Templates,Dependent Name,可能重复: 代码如下: template<typename T> class base { public: virtual ~base(); template<typename F> void foo() { std::cout << "base::foo<F>()" << std::endl; } }; template<typename T> class de
代码如下:
template<typename T>
class base
{
public:
virtual ~base();
template<typename F>
void foo()
{
std::cout << "base::foo<F>()" << std::endl;
}
};
template<typename T>
class derived : public base<T>
{
public:
void bar()
{
this->foo<int>(); // Compile error
}
};
我知道。但是,当函数本身是一个模板函数时(
foo()
函数在我的代码中),我尝试了所有的变通方法,但都失败了。您应该这样做:
template<typename T>
class derived : public base<T>
{
public:
void bar()
{
base<T>::template foo<int>();
}
};
模板
派生类:公共基
{
公众:
空条()
{
base::template foo();
}
};
以下是完整的可编译示例:
#include <iostream>
template<typename T>
class base
{
public:
virtual ~base(){}
template<typename F>
void foo()
{
std::cout << "base::foo<F>()" << std::endl;
}
};
template<typename T>
class derived : public base<T>
{
public:
void bar()
{
base<T>::template foo<int>(); // Compile error
}
};
int main()
{
derived< int > a;
a.bar();
}
#包括
模板
阶级基础
{
公众:
虚拟~base(){}
模板
void foo()
{
std::coutfoo
是一个依赖名称,因此第一阶段查找假定它是一个变量,除非使用typename
或template
关键字进行其他指定。在这种情况下,您需要:
this->template foo<int>();
this->template foo();
看看你是否想要所有血淋淋的细节。谢谢!今天真的救了我一命
#include <iostream>
template<typename T>
class base
{
public:
virtual ~base(){}
template<typename F>
void foo()
{
std::cout << "base::foo<F>()" << std::endl;
}
};
template<typename T>
class derived : public base<T>
{
public:
void bar()
{
base<T>::template foo<int>(); // Compile error
}
};
int main()
{
derived< int > a;
a.bar();
}
this->template foo<int>();