LINUX.ORG.RU

История изменений

Исправление www_linux_org_ru, (текущая версия) :

Это не тот случай. IIRC, ты не можешь указать в списке наследования один класс несколько раз.

можно, если класс параметризован

в контексте топикстартера это может-быть что-то вроде Красивая реализация списков (комментарий)

class ByLoadOrder {}; 
class ByMemoryOrder {};
class ByInitializationOrder {};

struct SomeStruct;

struct SomeStruct:
    public IntrusiveList<SomeStruct, ByLoadOrder>,
    public IntrusiveList<SomeStruct, ByMemoryOrder>,
    public IntrusiveList<SomeStruct, ByInitializationOrder>
{
    PVOID              ModuleBase;         // module base address
    PVOID              ModuleEntry;        // module entry point
    ULONG              ModuleSize;         // module size (?)
    UNICODE_STRING     ModulePath;         // module full path
    UNICODE_STRING     ModuleName;         // module name
};

но возникает интересный вопрос — можно ли тут написать

struct SomeStruct:
    public IntrusiveList<SomeStruct, SomeStruct::*ModuleName>,
    public IntrusiveList<SomeStruct, SomeStruct::*ModuleSize>
{
...

подозреваю, что нельзя, и это обидно :-)

Исходная версия www_linux_org_ru, :

Это не тот случай. IIRC, ты не можешь указать в списке наследования один класс несколько раз.

можно, если класс параметризован

в контексте топикстартера это может-быть что-то вроде Красивая реализация списков (комментарий)

class ByLoadOrder {}; 
class ByMemoryOrder {};
class ByInitializationOrder {};

struct SomeStruct;

struct SomeStruct:
    public IntrusiveList<SomeStruct, ByLoadOrder>,
    public IntrusiveList<SomeStruct, ByMemoryOrder>,
    public IntrusiveList<SomeStruct, ByInitializationOrder>,
{
    PVOID              ModuleBase;         // module base address
    PVOID              ModuleEntry;        // module entry point
    ULONG              ModuleSize;         // module size (?)
    UNICODE_STRING     ModulePath;         // module full path
    UNICODE_STRING     ModuleName;         // module name
};

но возникает интересный вопрос — можно ли тут написать

struct SomeStruct:
    public IntrusiveList<SomeStruct, SomeStruct::*ModuleName>
    public IntrusiveList<SomeStruct, SomeStruct::*ModuleSize>
{
...

подозреваю, что нельзя, и это обидно :-)