一个类可以有一个没有参数的模板构造函数吗

Can a class have a templated constructor without arguments?

本文关键字:参数 构造函数 有一个 一个      更新时间:2023-10-16

我想要一个看起来像的类

template <typename T>
class foo
{
  public:
    template <typename S>
    foo()
    {
      //...
    }
};

但我不知道如何调用构造函数。显然,我可以通过给foo()一个S类型的参数来实现这一点,但它可以在没有任何参数的情况下实现吗?

--Ron

不能将模板参数显式传递给构造函数模板。构建者没有名字(我们不要进入文字游戏)。然而,这并不意味着你不能完成你想要完成的任何事情。您可以通过类模板参数传入S,或者在构造函数中使用标记函数参数来推导S。或者使用工厂函数。

这对我在gcc 4.4.5(Debian 4.4.5-3)上有效

template<typename T>
class A
{
public:
    template<typename U>
    A()
        : t(U())
    { }
private:
    T t;
};
int main()
{
    using namespace std;
    A<float> a(A<float>::A<int>());
    return 0;
}

使用g++ -W -Wall -Wextra -pedantic tc.cpp -o tc编译,没有警告。

更新:此解决方案是错误的。评论中对此进行了解释。我认为这是一个有用的坏解决方案,我想把它留在这里。