【发布时间】:2017-06-03 03:25:57
【问题描述】:
我想创建一个std::integral_constant 的“容器版本”。那是用元素类型和非类型参数参数化的类型:
enum class A {
a = 1 << 0,
b = 1 << 1,
c = 1 << 2
};
template<typename T, T... Values>
struct static_container final {};
template<typename T, T... Ts>
constexpr auto make_static_container(T...) { // wrong
return static_container<T, Ts...>{};
}
template<typename F, F... FF>
void inline set(static_container<F, FF...>) {
std::cout << sizeof... (FF) << std::endl;
}
int main() {
constexpr static_container<A, A::a, A::b> sc1{}; //ok
constexpr auto sc2 = make_static_container(A::a, A::c); // not-ok
set(sc1);
set(sc2);
}
上面你可以看到我可以用显式类型创建sc1。
现在我喜欢有一个辅助函数来创建这样的类型,而无需指定(冗余)枚举类型。
这里的输出是:
2
0
有什么提示吗?
【问题讨论】:
-
您遇到什么错误以及使用什么编译器?
-
在 VS2015 上编译
-
抱歉这里不清楚:没有编译错误,但是“容器”是空的。
标签: c++ c++11 c++14 variadic-templates constexpr