在 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;
}
}
);
}
我意识到我在这里问了两个问题——你能像这样创建一个匿名类吗,你能从本地范围绑定变量吗(就像我提到的 myName 一样)。但我需要两者才能有用。
如果无法完成上述操作,那么就简洁性/缺乏样板而言,最接近使用 C++11 lambda 或类似方法的方法是什么。