c++ - 如何调用模板类的模板构造函数?

标签 c++ templates syntax constructor type-deduction

template<typename T>
struct A
{
    template<typename U>
    A() {}

    template<typename U>
    static void f() {}
};

int main()
{
    A<int>::f<int>(); // ok
    auto a = A<int><double>(); // error C2062: type 'double' unexpected
}

问题在代码中是不言而喻的。

我的问题是:

如何调用模板类的模板构造函数?

最佳答案

您不能直接调用类的构造函数。如果您无法从调用中推断出构造函数的模板参数,则无法调用该特定构造函数。

您可以做的是创建某种可用于零开销扣除的类型包装器:

template <typename T>
struct type_wrapper { };

template<typename T>
struct A
{
    template<typename U>
    A(type_wrapper<U>) {}
};

int main()
{
    auto a = A<int>(type_wrapper<double>{});
}

live example on wandbox

关于c++ - 如何调用模板类的模板构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43808848/

相关文章:

c++ - OpenGL实例化绘图如何处理顶点输入限制

c++ - 如果将其用作模板参数,是否需要使用 typename 来限定从属名称?

algorithm - 生成路径的逻辑算法

ruby - 是否有任何你避免使用的 Ruby 语言特性?

c++ - 调试断言失败!内存释放错误

c++ - << , >> 运算符在循环中的作用是什么

c++ - 函数的宏参数

javascript - 在JavaScript中的变量名之前使用var有什么区别/优点吗?

sql-server - SSMS 查询 - 如果数据库不存在,脚本将不会运行

c++ - 在 C++ 中从屏幕选择创建位图时的黑色图像