相关疑难解决方法(0)

检查所有可变参数模板参数的特征

背景:我创建了以下类C,其构造函数应该采用N类型的变量B&:

class A;
class B
{
    A* getA();
};

template<size_t N>
class C
{
public:
    template<typename... Args>
    inline C(Args&... args) :
        member{args.getA()...}
    {}
private:
    std::array<A*, N> member;
};
Run Code Online (Sandbox Code Playgroud)

问题:我的问题是如何将variadic约束Args为所有类型B

我的部分解决方案:我想定义一个谓词,如:

template <typename T, size_t N, typename... Args>
struct is_range_of :
    std::true_type // if Args is N copies of T
    std::false_type // otherwise
{};
Run Code Online (Sandbox Code Playgroud)

并相应地重新定义我的构造函数:

template <typename... Args,
          typename = typename std::enable_if<is_range_of_<B, N, Args...>::value>::type
         >
inline C(Args&... args); …
Run Code Online (Sandbox Code Playgroud)

c++ type-traits variadic-templates c++11 c++14

18
推荐指数
1
解决办法
2983
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

type-traits ×1

variadic-templates ×1