如何迭代可变参数模板类的所有基类并为每个类调用一个函数.
这是一个最小的例子:
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)...}; } };
但是如果你关心电话的顺序,请注意here讨论的已知gcc错误.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。