Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;函数:不带参数的可变模板_C++_Templates_Types_Variadic Templates - Fatal编程技术网

C++ C++;函数:不带参数的可变模板

C++ C++;函数:不带参数的可变模板,c++,templates,types,variadic-templates,C++,Templates,Types,Variadic Templates,我不确定这个问题是否已经得到回答。但这里是这样的: 我想知道是否有可能像这样做 template<typename...classes> void createObject(){ //pass each type into my template function wich takes one type only. } 模板 void createObject(){ //将每个类型传递到我的模板函数中,该函数只接受一种类型。 } 我真的不明白它到底是怎么工作的。我不能提供

我不确定这个问题是否已经得到回答。但这里是这样的:

我想知道是否有可能像这样做

template<typename...classes>
void createObject(){

  //pass each type into my template function wich takes one type only.

}
模板
void createObject(){
//将每个类型传递到我的模板函数中,该函数只接受一种类型。
}
我真的不明白它到底是怎么工作的。我不能提供任何函数参数的原因是,我的模板函数只采用一种类型,应该在方法中调用。这是因为它根据对象的类型返回对象

有什么建议吗

注: GCC 4.6.2

模板
结构调用方;
模板
结构调用程序
{
静态void调用()
{
创建();
caller::call();
}
};
模板
结构调用程序
{
静态void调用()
{
}
};
//因为您没有提到返回类型,所以我假设它为void
//如果它不是空的,那么我不知道你将返回什么,以及如何返回!
模板
void createObject(){
caller::call();
}
演示:


备选方案(较短版本):

模板
结构类型列表{};
模板
无效调用(类型列表)
{
创建();
调用(typelist());
};
无效调用(类型列表){}
模板
void createObject(){
调用(typelist());
}

演示:

一种方法是使用以下函数展开调用:

template <typename... Ts>
void swallow(Ts&&...) {
}
编辑:我们可以使用逗号运算符来代替createHelper:

swallow((create(), 0)...);

你能更好地确定功能应该做什么,应该返回什么吗?返回的对象之间是否有某种共同的类型?是的,假定为void。你能详细说明一下你在做什么吗。我意识到它是递归的。但我不知道怎么做。你似乎宣布了“调用”两次。@ Sidar:在C++中搜索元编程;请看几个例子,因为这将帮助您开始学习,这将使我更容易解释我所做的。否则,我要花很多时间,在这里输入一个迷你教程(我不能这样做,因为我现在在办公室里)。很好。谢谢你的回答。我想。。。转发下一种类型?但这个不是递归的,是吗?不,不是递归的。
swallow
的arg列表的要点是它绑定到任何东西(我们实际上不使用args做任何事情,正如您所看到的,整个调用都将被优化)。这只是在某些情况下扩展模板参数包的一种简单方法。我还没有完全理解它背后的概念。不过还是要谢谢你的意见。到目前为止,我已经解决了我的问题。稍后我可能会回到这个问题上。
template <typename... Ts>
void swallow(Ts&&...) {
}
template <typename T>
void create() {
}
template <typename T>
int createHelper() {
    create<T>();
    return 0;
}

template<typename... Ts>
void createObject(){
    swallow(createHelper<Ts>()...);
}
swallow((create(), 0)...);