具有类型/非类型参数的相同模板类?

时间:2014-06-28 22:01:06

标签: c++ templates c++11 metaprogramming c++14

给定模板类myclass,是否有一种棘手的方式允许用户:

myclass<void> x;
myclass<double> y;
myclass<42> z; // I do not expect the classic hack 
               // myclass<std::integral_constant<int, 42>>

因为在某些情况下,它是有道理的。我的目标是从用户的角度来看,不管(可能)可怕的元编程黑客都允许它。

注意:如果可能的话,我想要一个没有boost(只有标准库)的解决方案来正确理解方法的所有细节。

1 个答案:

答案 0 :(得分:4)

类模板参数是一个类型或值,所以我不能想到在直接实例化类时处理这两个问题的技巧。函数是一个不同的故事,所以让我们介绍一个make函数:

template <typename T> struct myclass {};

template <int V> struct value {}; // helper

template <typename T> myclass<T>        make_myclass() { return myclass<T>(); }
template <int V>      myclass<value<V>> make_myclass() { return myclass<value<V>>(); }

int main(int argc, char** argv)
{
    auto a = make_myclass<void>();
    auto b = make_myclass<double>();
    auto c = make_myclass<42>();
}

足够近?