【发布时间】:2011-09-22 11:07:21
【问题描述】:
我想允许使用我正在编写的类来指定作为模板参数的类型列表以及这些类型的分配器列表,其中类型位于奇数位置而分配器位于偶数位置:
template<typename... T>
class MyClass {
// Stuff inside
}
int main() {
MyClass<SomeType1, AllocatorOfSomeType1> c1;
MyClass<SomeType1, AllocatorOfSomeType1,
SomeType2, AllocatorOfSomeType2> c2;
MyClass<SomeType1, AllocatorOfSomeType1,
SomeType2, AllocatorOfSomeType2,
SomeType3, AllocatorOfSomeType3> c3;
// And so on....
}
在内部,有一个类型的向量元组用于存储是有意义的:
std::tuple<std::vector<EveryOddTypeInParameterPack>...> m_storage_;
还有一个分配器元组供使用:
std::tuple<std::vector<EveryEvenTypeInParameterPack>...> m_storage_;
如何在代码中实际声明这些元组?理论上,我需要以某种方式选择参数包中的每个奇数/偶数类型 - 这可能吗?
【问题讨论】:
-
@Alf 你能详细说明一下整个“为什么”吗?如果你问我为什么要这个接口——因为我需要为这个类的用户提供一种方便的方法来指定分配器。我对(合理的)替代方案持开放态度。
-
你可以只使用分配器作为你的模板参数列表,并使用 allocator::value_type 作为类型...
-
我很想尝试类似旧的
isEven(n) { return isOdd(n-1); }例程...也许see this answer 将参数打包到一个元组中以进行传输。 -
@Kerrek:要使用它,您还需要一个
isOdd(n) { return isEven(n - 1); },对吧? :-) -
@James:是的,那是“读者练习”部分 :-)
标签: c++ templates c++11 metaprogramming