gpt4 book ai didi

c++ - 具有非参数模板类型的类构造函数

转载 作者:太空狗 更新时间:2023-10-29 23:34:43 25 4
gpt4 key购买 nike

对于普通的 C++ 函数,模板参数可能没有出现在参数列表中:

template<typename T>
T default_construct()
{
return T();
}

并调用它

some_type x = default_construct<some_type>();

即使我使用的类型不在参数列表中,我仍然可以将它传递给函数。现在,我想在类构造函数中执行此操作:

struct Base;

template<typename T>
Base* allocate()
{
return new T; //Assume T derives from Base...
}

struct factory {
template<typename T>
factory()
: func(allocate<T>)
{}

std::tr1::function<Base*()> func;
};

但是当我想构造一个factory的实例时,我无法找到一种方法将参数提供给构造函数。

有没有一种方法可以将类转换为模板类或将一些未使用的T 对象发送给构造函数?

最佳答案

不,没有办法做到这一点。标准中 14.8.1/5 的注释解释了原因

[Note: because the explicit template argument list follows the function template name, and because conversion member function templates and constructor member function templates are called without using a function name, there is no way to provide an explicit template argument list for these function templates. ]

当然,它不一定是你发送的T对象。它可以是任何在其类型中编码为 T

的对象
template<typename T> struct type2type { };

struct factory {
template<typename T>
factory(type2type<T>)
: func(allocate<T>)
{}

std::tr1::function<Base*()> func;
};

factory f((type2type<Foo>()));

关于c++ - 具有非参数模板类型的类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1447554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com