你怎么称呼这个模板构造函数?

时间:2010-07-03 20:40:16

标签: c++ templates

  

可能重复:
  C++ invoke explicit template constructor

您好,

template <typename T>
class testing
{
public:

    template <typename R>
    testing()
    {
       // constructor A
    }

    template <typename R>
    testing(const R&)
    {
       // constructor B
    }
};

调用构造函数A的语法是什么?

我将需要在构造函数调用期间传递的类型。有办法打电话吗?构造函数B是一种解决方法,因为我只需要知道类型而不是整个对象。

谢谢,

斯蒂芬

2 个答案:

答案 0 :(得分:3)

您可以创建解决方法:

template<class A>
testing(boost::mpl::identity<A>);

// and instantiate like this
testing(boost::mpl::identity<A>());
之前我问过非常相似的问题 C++ invoke explicit template constructor

答案 1 :(得分:2)

你做不到。类模板基于类型T,因此在实例化类时传递的任何模板参数都将匹配T而不是R

修改:您可能还会发现此帖子很有用:Constructor templates and explicit instantiation

您应该继续使用变通方法(构造函数B)。大多数现代编译器都会优化掉未使用的参数,因此它应该没有区别。