背景:我创建了以下类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)