c++ - 可变模板类中的(简单)构造函数

标签 c++ syntax c++11 variadic-templates

构造函数和复制构造函数将如何查找这个可变参数模板类?

struct A {};
struct B {};

template < typename Head,
           typename... Tail>
struct X : public Head,
           public Tail...
{
    X(int _i) : i(_i) { }

    // add copy constructor

    int i;
};

template < typename Head >
struct X<Head> { };

int main(int argc, const char *argv[])
{
    X<A, B> x(5);
    X<A, B> y(x);

    // This must not be leagal!
    // X<B, A> z(x);

    return 0;
}

最佳答案

template < typename Head,
           typename... Tail>
struct X : public Head,
           public Tail...
{
    X(int _i) : i(_i) { }

    // add copy constructor
    X(const X& other) : i(other.i) {}

    int i;
};

在模板类中,X作为类型意味着 X<Head, Tail...> , 和所有 X具有不同模板参数的是不同的类型,因此 X<A,B> 的复制构造函数不匹配 X<B,A> .

演示:http://ideone.com/V6g35

关于c++ - 可变模板类中的(简单)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8770127/

相关文章:

c++ - 对象渲染顺序,场景图?

c++ - 为什么我的模型使用了天空盒的纹理?

c++ - 如何使用 C++11 lambda 作为 boost 谓词?

c++ - 表达式模板与手写代码

c++ - 如何简洁地创建一个 shared_ptr?

c# - 在 C# 应用程序中导出 C++ 函数

python - 扩展 setuptools 扩展以在 setup.py 中使用 CMake?

php - 我遇到过这种语法 : var == "" ? "-": var. 有人可以解释一下吗?

syntax - C++未知错误

php/mysql搜索查询语法