4
是否可以在C++14
中執行此類操作。我有一個基類如下:將函數注入子類
#include <iostream>
class AbstractElement;
class ConcreteElement;
class SuperConcreteElement;
class B
{
public:
void bar(AbstractElement*)
{
std::cout << "Abstract element" << std::endl;
}
void bar(ConcreteElement*)
{
std::cout << "Concrete element" << std::endl;
}
void bar(SuperConcreteElement*)
{
std::cout << "Super concrete element" << std::endl;
}
};
class AbstractElement
{
public:
virtual void foo() = 0;
};
class ConcreteElement : public AbstractElement
{
private:
B _b;
public:
void foo()
{
_b.bar(this); //1
}
};
class SuperConcreteElement : public AbstractElement
{
private:
B _b;
public:
void foo()
{
_b.bar(this); //2
}
};
int main()
{
AbstractElement *e = new ConcreteElement();
e -> foo(); //Prints Concrete element
}
正如你可以看到在//1
和//2
,函數體是完全相似的。但由於取決於this
的靜態類型,我無法將其完全移入基類。儘管如此,我並不想每次需要添加AbstractElement
的另一個子類時都會寫出完全相同的代碼。所以,我需要某種機制爲我們提供將代碼注入函數的功能。
只要馬科斯不是非常理想的解決方案,我想問一些可以在C++14
中解決這個問題的技巧。
很酷,實際上我懷疑模板在這裏會有幫助,但不知道如何使用它。 – user3663882