【发布时间】:2021-05-02 06:52:26
【问题描述】:
我有一个不直接获取可变参数模板参数类型的类。
相反,它获得了一种获取可变模板参数的类。
下面是一个简化的例子。
template<typename Foo> struct bar;
template<typename Derived, typename F> struct fooBase;
template<typename Derived, typename R, typename ...Args>
struct fooBase<Derived, R(Args...)> {
using function_type = R(Args...);
void func(Args&&... args) {
b->func2(std::forward<Args>(args)...);
}
void set(bar<Derived>* bp) {
b = bp;
}
bar<Derived>* b;
};
struct foo : public fooBase<foo, void(int)> {};
template<typename Foo>
struct bar {
using function_type = typename Foo::function_type;
void func2(/** what here? */) {
}
};
foo f;
bar<foo> b;
f.set(&b);
f.func(3);
有没有办法在bar 内部解决它而不声明父类或额外的模板参数?
【问题讨论】:
-
如果“解决它”是指从 foo 获得
Args...包?你可以使用struct bar<foo<R(Args...)>> { ... } -
@super 实际上,它更复杂。我已经编辑了帖子。我的问题是我可以用
function_type声明一个函数吗 -
fooBase的意义何在?如果你删除它,你可以按照我在评论中所说的去做。在这里,您可以使void(int)成为foos 签名的一部分并执行相同操作。 -
@super 这只是一个最小的可重现示例...实际代码有含义和其他复杂的东西。
标签: c++