0
我有一個類似這樣的類。我更喜歡在Parent類中獲得ParentDeb的typedef並將其重命名爲Member。這怎麼可能?我能看到的唯一方法是將std :: vector作爲公共成員,而不是使用繼承。在父類中包含兒童的typedef
typedef std::pair<std::string, boost::any> ParentMember;
class Parent: public std::vector<ParentMember>
{
public:
template <typename T>
std::vector<T>& getMember(std::string& s)
{
MemberFinder finder(s);
std::vector<ParentMember>::iterator member = std::find_if(begin(), end(), finder);
boost::any& container = member->second;
return boost::any_cast<std::vector<T>&>(container);
}
private:
class Finder
{
...
};
};
你[不應從公開的std ::向量繼承(http://stackoverflow.com/questions/4353203/thou-shalt-not-inherit-from-stdvector)。 – juanchopanza
@juanchopanza'其實,std :: vector的公有繼承沒有任何問題。如果你需要這個,就這樣做。「所以......爲什麼不呢?你不應該使用多態,因爲向量沒有虛擬角色,但是從向量繼承是可以的。 – ForEveR
你還可以提供一個可以使用你的類(和Parent :: Member類型)的代碼嗎? – UnknownGosu