有没有办法让这段代码按预期工作?
#include <iostream>
using namespace std;
template<typename T> class templated{
public:
static void f(){
cout<<"doing something generically"<<endl;
}
};
template<> class templated<int>{
public:
static void g(){
cout<<"doing something else, but specific to int"<<endl;
f();
}
};
int main(){
templated<int>::g();
}
G ++抱怨f未在范围内声明。我已经尝试了调用f()
(templated<int>::f()
,在templated
中放置一个虚拟声明,在类定义之外移动声明...)所有可能的变化,所有这些都失败了,所以我会在这里省略它们。
答案 0 :(得分:2)
由于您没有使用模板参数类型,因此您可以在此特定情况下继承:
template<> class templated<int>: templated<void>{
public:
static void g(){
cout<<"doing something else, but specific to int"<<endl;
f();
}
};
答案 1 :(得分:1)
您的专业版本 <{1}}(此处没有“继承”)。
如果你想继承,你应该考虑将f()
移到基类中。
答案 2 :(得分:1)
不,专业化与基本模板完全分开,不会“继承”任何内容。
也许你可以添加一个可以从任何地方调用的自由函数?
答案 3 :(得分:0)
你可以使用某种包装器,有些像这样:
template<typename T>
class templated_core
{
public:
static void f()
{
cout<<"doing something generically"<<endl;
}
};
template<typename T>
class templated : public templated_core<T>
{
};
template<>
class templated<int> : public templated_core<int>
{
public:
static void g()
{
cout<<"doing something else, but specific to int"<<endl;
f();
}
};