给定一个模板类 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>();
}
足够接近吗?
关于c++ - 具有类型/非类型参数的相同模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24471334/