【发布时间】:2017-10-27 22:43:15
【问题描述】:
标题很难用文字表达,但这是我试图在不可编译的代码中实现的目标:
template<template <typename> class Container>
Container<int> foo() {
return Container<int>{1,2,3};
}
int main() {
auto bar = foo<std::vector>();
return 0;
}
基本上,我想要一个模板函数,它可以从传递给它的类型和先前已知的类型(在本例中为 int)“组合”其返回类型。在这种情况下,我想要一个在调用者指定的容器内返回任意数据类型的函数。 (任意我不是指在编译时随机或不确定,而是调用者没有关于数据类型的“输入”,这是在函数本身内部确定的)。
这种类型的事情甚至可以用clang或gcc和std+1z来实现吗?我错过了一些非常明显的东西吗?有没有我不知道的跨越数百个字符的“1 行”解决方案?
我在这里看到过各种类似的例子,但它们似乎都假设函数将指针或引用作为参数并填充这些容器。
【问题讨论】:
-
我不知道这是否是您的解决方案,但如果您将函数的模板参数设为
template<template <typename...> class Container>,它就会编译。 -
@ James Root 我不知道可变参数模板的黑魔法是什么,但是我已经苦苦挣扎了将近半个小时的更复杂的函数现在刚刚编译并通过了所有单元测试。所以,如果你能把它写下来作为答案......(虽然我想知道它实际发生的原因,但现在我很高兴它终于奏效了:p)
-
@JamesRoot 这比我的解决方案好,虽然我有点惊讶它的工作原理。
-
@James Root,我也不确定你的第一个问题是什么意思......大概它看起来像 {new int(1), new int(2) ... etc}
标签: c++ templates metaprogramming template-meta-programming c++17