覆盖参数包声明和扩展位点
Override parameter pack declaration and expansion loci
我有一个简单的界面setter:
template<typename Interface>
struct FrontEnd
{
virtual void inject(Interface*& ptr, Client* client) = 0;
}
我想通过这样的参数包来实现这些接口:
template<typename ... Is>
struct BackEnd : public FrontEnd<Is>...
{
void inject(Is*& ptr, Client* client) override
{
ptr = someStuff<Is>.get(client);
}
};
但是 parameter pack not expanded with '...'
失败了。我在 cppref 中找不到与此类似的内容。我不知道扩展位点应该去哪里(假设这甚至是合法的,我倾向于否)。 知道如何为参数包中的每种类型提供覆盖吗?
你可能想要这样的东西
template<typename Is>
struct OneBackEnd : public FrontEnd<Is>
{
void inject(Is*& ptr, Client* client) override { /* whatever */ }
};
template<typename ... Is>
struct BackEnd : public OneBackEnd<Is>...
{
using OneBackEnd<Is>::inject...;
};
我有一个简单的界面setter:
template<typename Interface>
struct FrontEnd
{
virtual void inject(Interface*& ptr, Client* client) = 0;
}
我想通过这样的参数包来实现这些接口:
template<typename ... Is>
struct BackEnd : public FrontEnd<Is>...
{
void inject(Is*& ptr, Client* client) override
{
ptr = someStuff<Is>.get(client);
}
};
但是 parameter pack not expanded with '...'
失败了。我在 cppref 中找不到与此类似的内容。我不知道扩展位点应该去哪里(假设这甚至是合法的,我倾向于否)。 知道如何为参数包中的每种类型提供覆盖吗?
你可能想要这样的东西
template<typename Is>
struct OneBackEnd : public FrontEnd<Is>
{
void inject(Is*& ptr, Client* client) override { /* whatever */ }
};
template<typename ... Is>
struct BackEnd : public OneBackEnd<Is>...
{
using OneBackEnd<Is>::inject...;
};