是否可以从可变参数模板类型参数调用静态方法?
Is it possible to call static method form variadic template type parameter?
假设我们有 类:
class A
{
public:
static void m() {}
}
class B
{
public:
static void m() {}
}
template<typename... T>
class C
{
public:
void c()
{
T::m(); // Call somehow m() of A and B, if T is a parameter pack of A and B
}
}
如何扩展参数包并为每个类型调用静态方法?
这个问题是我们不能只扩展参数包并在函数体内直接调用它,因为它不是有效的上下文。
void c()
{
T::m()...; //invalid context for parameter pack expansion
}
有很多技巧可以解决这个问题。我通常使用的杠杆 std::initializer_list
:
void c()
{
(void)std::initializer_list<int> { (T::m(), 0)... }; //valid context
}
在 C++17 中我们将得到 fold expressions 这将大大简化事情:
void c()
{
(T::m(), ...); //much nicer
}
假设我们有 类:
class A
{
public:
static void m() {}
}
class B
{
public:
static void m() {}
}
template<typename... T>
class C
{
public:
void c()
{
T::m(); // Call somehow m() of A and B, if T is a parameter pack of A and B
}
}
如何扩展参数包并为每个类型调用静态方法?
这个问题是我们不能只扩展参数包并在函数体内直接调用它,因为它不是有效的上下文。
void c()
{
T::m()...; //invalid context for parameter pack expansion
}
有很多技巧可以解决这个问题。我通常使用的杠杆 std::initializer_list
:
void c()
{
(void)std::initializer_list<int> { (T::m(), 0)... }; //valid context
}
在 C++17 中我们将得到 fold expressions 这将大大简化事情:
void c()
{
(T::m(), ...); //much nicer
}