Введение. Я сталкиваюсь с странной ошибкой с Objective-C++. Все мои файлы имеют правильный тип (.h/.mm вместо .hpp/.cpp). Я использую clib ++ (встроенный в xCode последней версии на macOS Sierra, но он был таким же образом на El Capitan) вместо libstd ++ (который старше и не полностью поддерживает даже C++ 11).Компиляция исполняемого файла Objective-C++ (с .mm)
Проблема. Я не могу скомпилировать классы шаблонов как с заголовком, так и с исполняемыми файлами. Только в том случае, если весь код написан в заголовке!
Однако, если я создаю класс без шаблона, он отлично работает даже при разбиении на 2 файла. Заголовок:
class TempClass {
public:
TempClass(int x);
~TempClass() {};
};
Исполняемые:
TempClass::TempClass(int x) {}
Шаблон кода класса. Заголовок:
template <typename T> class TempClassTemplate {
public:
TempClassTemplate(T v);
~TempClassTemplate() {};
T val;
};
Исполняемые:
template<typename T> TempClassTemplate<T>::TempClassTemplate(T v) : val(v) {};
Пример использования, что приводит к аварии:
int main(int argc, char * argv[]) {
auto obj = new TempClass(5);
printf("temp size is %lu\n", sizeof(obj));
auto objV = new TempClassTemplate<int>(10);
printf("temp size is %lu, val is %i\n", sizeof(objV), objV->val);
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Результаты: