我有以下适用于 VS2017 的代码:
template <typename ... Args>
struct Composite: Args...
{
using Composite<Args...>::foo;
void foo(float exposure)
{
return this->foo(*this, exposure);
}
void internalBar(float e) { std::cout << "it works" << e; }
};
它以这种方式使用:
struct A
{
template <typename T>
void foo(T& device, float exposure)
{
device.internalBar(exposure);
}
};
struct B
{};
struct C
{};
int main(int argc, char *argv[])
{
auto u = Composite<A, B, C>();
u.foo(5.0f);
return 0;
}
问题在于使用 Composite<Args...>::foo的行,因为它不在 c++ 标准中。这就是为什么它不适用于 gcc:Composite<Args...> 不是 Composite 的基类。
我不得不使用这条线,因为 Composite 隐藏了 A 的 foo。
我如何才能拉入单个打包参数的范围?
谢谢。