给定模板类myclass
,是否有一种棘手的方式允许用户:
myclass<void> x;
myclass<double> y;
myclass<42> z; // I do not expect the classic hack
// myclass<std::integral_constant<int, 42>>
因为在某些情况下,它是有道理的。我的目标是从用户的角度来看,不管(可能)可怕的元编程黑客都允许它。
注意:如果可能的话,我想要一个没有boost
(只有标准库)的解决方案来正确理解方法的所有细节。
答案 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>();
}
足够近?