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

标签 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 的解决方案(仅限标准库)正确理解该方法的所有细节。

最佳答案

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

相关文章:

c++ - 使用复合语法解析时的 Boost.spirit 段错误

c++ - 指向多次实例化的函数模板的指针

c++ - 从函数 : optimizing speed and modern style 返回容器

带有枚举的 C++ Visual Studio 调试器错误

c++ - visual studio 2015 中的错误在 2012 年消失

c++ - 在类模板(链接列表)中重载运算符

c++ - 部分模板特化 - 将类型作为参数传递?

c++ - 使用 Clang 而不是 GCC 构建(有问题的)示例时内存损坏

c++ - 使用 std::packaged_task 时 std::future 仍然延迟(VS11)

c++ - SDL2 可以用 C 语言(相对于 C++)编程吗?