基类模板实例化取决于派生类构造函数参数类型

发布于 2024-10-10 21:38:52 字数 511 浏览 0 评论 0原文

下面,编译器不应该根据派生类构造函数参数类型生成基类构造函数吗?

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”

我理解该错误,但这是为什么呢?

In the following, shouldn't base class constructor be generated by the compiler based 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;
}

error C2664: 'foo::foo(T)' : cannot convert parameter 1 from 'int' to 'T'

I understand the error, but why is that ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北方的巷 2024-10-17 21:38:52

class bar : public foo 中的语法不正确。

  • bar 取决于模板参数 T 并且 bar 应该是一个模板:

    模板
    类栏:公共 foo
    {
    民众:
        酒吧(int a):foo(a){}
    };
    
    
    int main()
    {
        酒吧对象(10);
    }
    
  • 或者你想要barfoo 的特定实例继承,例如:

    class bar : public foo;
    {
    民众:
        酒吧(int a):foo(a){}
    };
    
    
    int main()
    {
        酒吧对象(10);
    }
    

The syntax in class bar : public foo<class T> is incorrect.

  • Either bar depends on a template parameter T and bar should be a template :

    template<class T>
    class bar : public foo<T>
    {
    public:
        bar(int a):foo(a){}
    };
    
    
    int main()
    {
        bar<int> obj(10);
    }
    
  • Or you want bar to inherit from a specific instantiation of foo such as :

    class bar : public foo<int>
    {
    public:
        bar(int a):foo(a){}
    };
    
    
    int main()
    {
        bar obj(10);
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文