Код: Выделить всё
# include
# include
class Base
{};
class A : public Base
{
public:
struct Configuration { /*hyperparameters*/ };
A(Configuration const&) {}
};
class B : public Base
{
public:
struct Configuration { /*hyperparameters*/ };
B(Configuration const&) {}
};
struct BaseConfiguration
{
using type = std::variant;
static std::unique_ptr instantiate(type const& config);
};
struct BaseVisitor
{
// My problem is here...
std::unique_ptr operator()(A::Configuration const& config)
{ return std::make_unique(config); }
std::unique_ptr operator()(B::Configuration const& config)
{ return std::make_unique(config); }
};
std::unique_ptr BaseConfiguration::instantiate(type const& config)
{
return std::visit(BaseVisitor(), config);
}
int main()
{
BaseConfiguration::type config = A::Configuration();
std::unique_ptr x = BaseConfiguration::instantiate(config);
return 0;
}
Код: Выделить всё
struct BaseVisitor
{
template
std::unique_ptr operator()(typename X::Configuration const& config)
{ return std::make_unique(config); }
};
< /code>
ошибка компилятора: < /p>
: In static member function 'static std::unique_ptr BaseConfiguration::instantiate(const type&)':
:36:22: error: no matching function for call to 'visit(BaseVisitor, const BaseConfiguration::type&)'
36 | return std::visit(BaseVisitor(), config);
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
Подробнее здесь: https://stackoverflow.com/questions/794 ... ndant-code