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

C++ 具有类型/非类型参数的相同模板类?,c++,templates,c++11,metaprogramming,c++14,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>> 因为在某些情况下,它是有意义的。我的目标是从用户的角度来允许这一点,而不

给定一个模板类myclass,是否有一种巧妙的方法允许用户执行此操作:

myclass<void> x;
myclass<double> y;
myclass<42> z; // I do not expect the classic hack 
               // myclass<std::integral_constant<int, 42>>
因为在某些情况下,它是有意义的。我的目标是从用户的角度来允许这一点,而不管允许它的可能是可怕的元编程黑客


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

类模板参数要么是类型,要么是值,所以我想不出在直接实例化类时同时处理这两个参数的窍门。函数是另一个故事,所以让我们介绍一个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>();
}

足够接近吗?

类模板参数要么是一个类型,要么是一个值,所以在直接实例化类时,我想不出处理这两个参数的技巧。函数是另一个故事,所以让我们介绍一个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>();
}

接近?

你可以这样做,但是我怀疑它是用类模板来实现的。从C++的观点来看,这没有任何意义。模板参数是类型或值,而不是两者。在MyCclass中你如何正确使用这个模板参数?你可以这样做,但是我怀疑它是用类模板来实现的。从C++的观点来看,这没有任何意义。模板参数是类型或值,而不是两者。如何在myclass中准确地使用此模板参数?您不需要值,例如myclass。价值类是无用的。虽然,这不是OP想要的+1的意思。@402个woops,误读。@402:我假设OP需要不同的myclass实例化以获得不同的值。您不需要值,例如myclass,普通int就可以了。价值类是无用的。虽然,这不是OP想要的+1的意思。@402两个woops,误读。@402:我假设OP需要不同的myclass实例化来实现不同的值。