如何迭代可变参数模板类的所有基类并为每个类调用一个函数.
这是一个最小的例子:
struct A { void foo() { std::cout << "A" << std::endl; } }; struct B { void foo() { std::cout << "B" << std::endl; } }; struct C { void foo() { std::cout << "C" << std::endl; } }; template<typename... U> struct X : public U... { void foo() { static_cast<U*>(this)->foo()...; // ??? should call `foo` for all `U` } }; int main() { X<A,B,C> x; x.foo(); }
解决方法
这是一种方式:
struct thru{template<typename... A> thru(A&&...) {}}; struct A { void foo() { std::cout << "A" << std::endl; } }; struct B { void foo() { std::cout << "B" << std::endl; } }; struct C { void foo() { std::cout << "C" << std::endl; } }; template<typename... U> struct X : public U... { void foo() { thru{(U::foo(),0)...}; } };