一个类可以有一个没有参数的模板构造函数吗
Can a class have a templated constructor without arguments?
我想要一个看起来像的类
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
编译,没有警告。
更新:此解决方案是错误的。评论中对此进行了解释。我认为这是一个有用的坏解决方案,我想把它留在这里。
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?