У меня есть шаблонный класс с именем w32file, который работает как с wchar_t, так и с char.Он объявлен:
template <typename T>
class w32file { ... }
И у него есть много методов-членов, таких как этот:
inline bool isDirectory();
Теперь я знаю, что могу поместить всю реализацию этих методов-членов в заголовочный файлзатем они будут скомпилированы в любые объектные файлы, использующие мой шаблон.Однако я не очень хочу этого, так как этот класс будет использоваться повсеместно, и это приведет к большому количеству повторяющихся объектных кодов.
Итак, на данный момент у меня есть файл cpp, которыйсвязан со статической библиотекой, которая делает это:
bool w32utils::w32file<wchar_t>::isDirectory()
{
auto dwAttr = GetFileAttributes(m_name.c_str());
return ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
}
bool w32utils::w32file<char>::isDirectory()
{
auto dwAttr = GetFileAttributes(m_name.c_str());
return ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
}
Теперь мой объектный код создается только один раз, но мне пришлось создать две копии одного и того же метода в моем исходном коде.Кто-нибудь знает способ обойти это?Есть ли способ развернуть обе реализации в моем объектном файле с помощью шаблонов?