[英]Base class template instantiation depending on derived class constructor argument type
在下面,編譯器是否應基於派生類構造函數的參數類型生成基類構造函數?
template <class T>
class foo
{
int a;
public:
foo(T a){}
// When I convert the constructor to a function template, it works fine.
// template <typename T> foo(T a){}
};
class bar : public foo<class T>
{
public:
bar(int a):foo(a){}
};
int main(void)
{
bar obj(10);
system("pause");
return 0;
}
錯誤C2664:'foo :: foo(T)':無法將參數1從'int'轉換為'T'
我理解錯誤,但這是為什么呢?
class bar : public foo<class T>
的語法class bar : public foo<class T>
不正確。
bar
取決於模板參數T
而bar
應該是模板:
template<class T> class bar : public foo<T> { public: bar(int a):foo(a){} }; int main() { bar<int> obj(10); }
或者,您希望bar
繼承自foo
的特定實例,例如:
class bar : public foo<int> { public: bar(int a):foo(a){} }; int main() { bar obj(10); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.