首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++模板构造函数

C++模板构造函数
EN

Stack Overflow用户
提问于 2010-10-18 23:50:41
回答 9查看 172.3K关注 0票数 131

我希望有一个非模板类和一个没有参数的模板构造函数。

据我所知,这是不可能的(因为它会与默认构造函数- am right?冲突),变通方法如下:

代码语言:javascript
复制
class A{
   template <typename U> A(U* dummy) {
   // Do something
   }
};

也许有更好的替代方案(或者更好的变通方法)?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-10-18 23:59:42

在调用构造函数模板时,无法显式指定模板参数,因此必须通过参数推导来推导它们。这是因为如果你说:

代码语言:javascript
复制
Foo<int> f = Foo<int>();

<int>Foo类型的模板参数列表,而不是它的构造函数。构造函数模板的参数列表无处可去。

即使使用了变通方法,您仍然必须传递参数才能调用该构造函数模板。完全不清楚你想要达到什么目的。

票数 116
EN

Stack Overflow用户

发布于 2010-10-18 23:54:51

您可以创建一个模板化工厂函数:

代码语言:javascript
复制
class Foo
{
public:
    template <class T> static Foo* create() // could also return by value, or a smart pointer
    {
        return new Foo(...);
    }
...        
};
票数 37
EN

Stack Overflow用户

发布于 2010-10-18 23:57:33

据我所知,使用

是不可能的(因为它会与默认构造函数冲突--我说的对吗?)

你错了。它不会以任何方式冲突。你就是永远不能把它叫醒。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3960849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档