小编sqr*_*oot的帖子

使用std :: apply和variadic包

我正在尝试创建一个泛型类,它接受一组类型,将它们存储在元组中,并可以对它们应用函数.

到目前为止我尝试的是以下内容:

#include <tuple>
struct Base{
    virtual void base_function() = 0;
};

template<typename ...T>
struct A : public Base{
    std::tuple<T...> as;
    A(T... pack):as(pack...){};
    void base_function(){
        std::apply([](auto t){t.base_function();}, as);
    }
};

struct B : public Base{
    void base_function(){};
};


struct C : public Base{
    void base_function(){};
};

struct D : A<B, C>{
    D():A(B(),C()){};
};
Run Code Online (Sandbox Code Playgroud)

我期望在D上调用base_function时从类B和C调用base_function但是编译器会生成以下错误:

错误:没有匹配函数来调用
' __invoke(A<T>::base_function() [with T = {B, C}]::<lambda(auto:1)>, std::__tuple_element_t<0, std::tuple<B, C> >&, std::__tuple_element_t<1, std::tuple<B, C> >&)'

c++ templates c++17 stdapply

10
推荐指数
1
解决办法
676
查看次数

标签 统计

c++ ×1

c++17 ×1

stdapply ×1

templates ×1