相关疑难解决方法(0)

如何使用SFINAE的椭圆工作?

在过去使用SFINAE选择构造函数重载时,我通常使用以下内容:

template <typename T>
class Class {
public:
    template <typename U = T, typename std::enable_if<std::is_void<U>::value, int>::type=0>
    Class() {
        std::cout << "void" << std::endl;
    }

    template <typename U = T, typename std::enable_if<!std::is_void<U>::value, int>::type=0>
    Class() {
        std::cout << "not void" << std::endl;
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚遇到了这个替代方案:

template <typename U = T, typename std::enable_if<std::is_void<U>::value>::type...>
Class() {
    std::cout << "void" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

考虑到以下是非法的......

template <typename U = T, void...> // ERROR!
Class() { }
Run Code Online (Sandbox Code Playgroud)

...上面使用省略号而不是非类型模板参数的替代方法如何工作?


完整代码:http://coliru.stacked-crooked.com/a/64a1aaf13ce6099b

c++ sfinae variadic-templates c++11

5
推荐指数
1
解决办法
223
查看次数

标签 统计

c++ ×1

c++11 ×1

sfinae ×1

variadic-templates ×1