簡體   English   中英

基類模板實例化取決於派生類構造函數的參數類型

[英]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取決於模板參數Tbar應該是模板:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM