Защищенные операторы наследования, преобразования и преобразования

Я пытаюсь использовать protected наследование, чтобы скрыть C-стиль struct члены.

Делая это, мой вывод class теперь может получить доступ ко всему от struct скрывая его от остальной части программы, но это имеет свою цену: компилятор больше не позволяет мне неявно приводить к этим производным class в базовый C-стиль struct,

Итак, чтобы снова включить функцию, я добавил public преобразование operator в производном class, Но вот идут странные вещи:

  • во-первых, я не мог пометить operator как explicit: компилятор начинает говорить "класс хранилища" на struct введите в operator определение.
  • без explicit ключевое слово, компилятор все еще распознает преобразование как недоступное в точке, где оно вызывается (я использовал static_cast<T>()).

Любая идея? (Я использую Visual Studio 2010)

Пример кода:

struct DataFromC
{
    int a, b, c;
};

class Data : protected DataFromC
{
public:

    explicit operator DataFromC()
    {
        return (DataFromC)(*this);
    }
};

0 ответов

Другие вопросы по тегам