多重繼承我有以下情況:C++從相同的基本模板歧義
我有一個使用在想要被放在一個列表類繼承了ListNode類的List類。
struct _List_node_base
{
...
void _M_hook(_List_node_base* const __position);
void unhook();
};
template<typename _Tp>
class ListNode : public _List_node_base
{
...
typedef _Tp* pointer;
public:
pointer GetNext();
pointer GetPrev();
};
template<typename _Tp>
class List
{
...
};
我也有一個HashTable類,類似於列表有一個HashNode類。 HashNode使用ListNode以便放入適當散列槽中的列表中。
template<typename _KeyType, typename _ObjectType>
class HashNode : public ListNode<ObjectType>
{
...
public:
_KeyType GetHashKey()
};
template<typename _KeyType, typename _ObjectType, typename _HashFunctionType>
class HashTable
{
//example
template<typename _KeyType, typename _ObjectType, typename _HashFunctionType>
void HashTable<_KeyType, _ObjectType, _HashFunctionType>::Insert(_ObjectType *object)
{
uint pos = hashFunction(object->GetHashKey(), tableSize);
hashTable[pos].PushBack(object);
}
};
我有一個類,既想列表和可哈希。
class A : public HashNode<SomeKeyType_t, A>, public ListNode<A>
{
...
};
的問題是,編譯抱怨,在List_node_base成員具有A級
無論在哈希類和List類的曖昧的基礎上,他們使用直接ListNode和List_node_base方法在類A上。
基本上,我想讓類A可哈希和列表,但是HashNode的ListNode功能不應暴露在類HashTable的實現之外。
此外,類的要點是它們必須是非侵入性的,動態分配和複製類是不允許的。否則,這將通過創建一個容器類來解決。
按照你的設計,HashNode已經是ListNode
設計好的容器庫非常困難。發明輪子的理由是什麼?比如說,Boost.Intrusive已經有了非常成熟的侵入式容器實現。 – Stas 2010-12-07 20:59:38
**不要**用下劃線開始您的標識符:[使用下劃線是什麼](http://stackoverflow.com/questions/228783/what-are-the -rules-約-使用-AN-下劃線在-AC-標識符/ 228797#228797)。這個`_List_node_base`(幾乎每個類型或模板參數都是保留的,甚至有幾個參數)被保留供系統使用。 – 2010-12-07 21:21:55