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 を隠すため、この行を使用する必要がありました。
単一のパックされたパラメーターのスコープを取得するにはどうすればよいですか?
ありがとう。