В C++ я могу создать реализацию интерфейса «на лету» (который идеально связывает переменные локальной области). Не знаете, как объяснить это лучше, так что я положил, что я хотел бы код, чтобы выглядеть (примерно):Могу ли я создать анонимный класс «на лету» (реализация интерфейса) в C++
// Given the following:
class Visitor
{
virtual void visit(const Data& data) = 0;
}
class DataStore
{
void visitData(Visitor& visitor) { /** Invokes visitor with each item of data. */ }
}
// Imagine one would write something like:
void inSomeFunction(DataStore& store)
{
std::string myName = "bob";
class MyVisitor: public Visitor
{
public:
MyVisitor(const std::string& p): person(p);
virtual void visit(const Data& data) override
{
std::cout << person << " is visiting " << data << std::endl;
}
private:
std::string person;
}
MyVisitor myVisitor(myName);
store.visitData(myVisitor);
}
// Instead of the above, I want to write instead something like:
void inSomeFunction(DataStore& store)
{
std::string myName = "bob";
store.visitData(
class: public MyVisitor
{
virtual void visit(const Data& data) override
{
std::cout << myName << " is visiting " << data << std::endl;
}
}
);
}
Я понимаю, что я спрашиваю 2 вопроса здесь - вы можете создать класс Anonymouse, как это, и вы можете привязать переменные из локальной области (например, я упомянул myName). Но мне нужно, чтобы это было полезно.
Если вышеуказанное не может быть сделано, то, что ближе всего, можно использовать для использования C++ 11 lambdas или аналогичного с точки зрения краткости/отсутствия шаблона.
Вы можете достичь того, чего хотите, но не так, как хотите. Я бы использовал функтор для чего-то подобного или посетителя, который принимает указатель на функцию, тогда вы можете просто использовать лямбда. – csl
Моя единственная проблема заключается в том, что способ, которым вы указываете подпись типа для указателя функции в C++, ужасен. Например. Какова была бы подпись метода visitData, если бы я использовал указатель на функцию вместо интерфейса? – nappyfalcon
Если нет нового, лучшего способа указать тип для параметров, которые принимают указатель на функцию ...? – nappyfalcon