Как применить ограничение шаблона Enable_if_t ко всему классу с отдельным кодом реализации, если это возможно? [закрыто] ⇐ C++
-
Anonymous
Как применить ограничение шаблона Enable_if_t ко всему классу с отдельным кодом реализации, если это возможно? [закрыто]
Примечание: я предпочитаю всегда хранить свои реализации отдельно от объявлений, даже для кода шаблона, который все равно должен находиться в заголовке. Поэтому я обычно использую файл .h для объявлений, а в нижней части этого файла включаю файл .hpp для встроенных и шаблонных реализаций, а затем помещаю свои не- встроенные, нешаблонные реализации в файлах .cpp. Возможно, в данном случае невозможно следовать этому предпочтению, или я делаю что-то неправильно.
У меня есть исходный код, который компилируется и запускается:
#include #include #include #define OddSource_Export __attribute((visibility("default"))) класс IPAddress {}; класс IPv4Address: публичный IPAddress { публика: uint8_t version() const { возврат 4; } }; класс IPv6Address: публичный IPAddress { публика: uint8_t version() const { возврат 6; } }; шаблон класс OddSource_Export InterfaceIPAddress { публика: InterfaceIPAddress (TAddress const &, uint16_t); uint8_t version() const; частный: ::std::unique_ptr const _address; uint16_t const _flags; }; шаблон ИнтерфейсIPAddress:: InterfaceIPAddress (TAddress const &address, флаги uint16_t) : _address(новый TAddress(адрес)), _flags(флаги) {} шаблон uint8_t ИнтерфейсIPAddress:: версия() константа { верните this->_address->version(); } интервал основной() { IPv4Адрес адрес4; Адрес InterfaceIPAddress(addr4, 0); std::cout
Примечание: я предпочитаю всегда хранить свои реализации отдельно от объявлений, даже для кода шаблона, который все равно должен находиться в заголовке. Поэтому я обычно использую файл .h для объявлений, а в нижней части этого файла включаю файл .hpp для встроенных и шаблонных реализаций, а затем помещаю свои не- встроенные, нешаблонные реализации в файлах .cpp. Возможно, в данном случае невозможно следовать этому предпочтению, или я делаю что-то неправильно.
У меня есть исходный код, который компилируется и запускается:
#include #include #include #define OddSource_Export __attribute((visibility("default"))) класс IPAddress {}; класс IPv4Address: публичный IPAddress { публика: uint8_t version() const { возврат 4; } }; класс IPv6Address: публичный IPAddress { публика: uint8_t version() const { возврат 6; } }; шаблон класс OddSource_Export InterfaceIPAddress { публика: InterfaceIPAddress (TAddress const &, uint16_t); uint8_t version() const; частный: ::std::unique_ptr const _address; uint16_t const _flags; }; шаблон ИнтерфейсIPAddress:: InterfaceIPAddress (TAddress const &address, флаги uint16_t) : _address(новый TAddress(адрес)), _flags(флаги) {} шаблон uint8_t ИнтерфейсIPAddress:: версия() константа { верните this->_address->version(); } интервал основной() { IPv4Адрес адрес4; Адрес InterfaceIPAddress(addr4, 0); std::cout
Мобильная версия