Защищенные операторы наследования, преобразования и преобразования
Я пытаюсь использовать 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);
}
};