Можно ли установить разные модификаторы доступа к специализациям шаблона члена класса? Пример кода (не компилируется):
class SimpleClass { public: template <typename T> void Method(); template <> void Method<char>(); protected: template <> void Method<int>(); protected: template <> void Method<float>(); };
Подвопрос: можно ли установить разные модификаторы доступа к специализациям конструктора шаблона класса? Пример кода (не компилируется):
class SimpleClass { public: template <typename T> SimpleClass(T); template <> SimpleClass<char>(char); protected: template <> SimpleClass<int>(int); private: template <> SimpleClass<float>(float); };
Можно ли установить разные модификаторы доступа к специализациям члена шаблона класса? Пример кода (не компилируется):
template <typename T> class ClassTemplate { public: void Method(); template <> void Method<char>(); protected: template <> void Method<int>(); protected: template <> void Method<float>(); };
Подвопрос: можно ли устанавливать разные модификаторы доступа к специализациям конструктора шаблона класса? Пример кода (не компилируется):
template <typename T> class ClassTemplate { public: ClassTemplate(T); template <> ClassTemplate<char>(char); protected: template <> ClassTemplate<int>(int); private: template <> ClassTemplate<float>(float); };
Чтобы быть более конкретным: в 1) я ищу обходной путь С++ 03 для такого кода С++ 11:
class SimpleClass
{
public:
template <typename T>
SimpleClass(T);
template <typename T>
void Method();
};
template <>
SimpleClass::SimpleClass<char>(char);
template <>
SimpleClass::SimpleClass<int>(int) = delete;
template <>
void SimpleClass::Method<char>();
template <>
void SimpleClass::Method<int>() = delete;
В 2) я ищу обходной путь C++03 для следующего кода C++11:
template <typename T>
class ClassTemplate
{
public:
ClassTemplate(T);
void Method();
};
template <>
ClassTemplate<char>::ClassTemplate(char);
template <>
ClassTemplate<int>::ClassTemplate(int) = delete;
template <>
void ClassTemplate<char>::Method();
template <>
void ClassTemplate<int>::Method() = delete;