подобное (класс вымышленный и упрощён до сути):
Value.h:
template<typename T>
class Value {
public:
explicit Value(T a) : a(a) {}
void sum(const Value<T>& other);
private:
T a;
};
Value.cpp:
#include "Value.h"
template<typename T>
void Value<T>::sum(const Value<T> &other) {
std::cout << a + other.a;
}
P.S. Я понимаю почему чисто технически не получается, но мб всё таки можно как-то?)) А то не хочется всё пихать в .h
Единственная идея - обойти через pImpl, но в моей задачи это такое себе)
.inl
это такой лайфхак только для простых функций, на которых inline сработает или вообще для всех и это просто такой обход?
Не хочется, чтобы это было публичным (в hpp) или важно подчистить hpp от имплементации для того, чтобы использовать hpp как документацию?
Вопрос в том, чтобы определение шаблона было доступно в единице трансляции, запрашивающей инстанцирование. .inl - всего лишь соглашение о расширении заголовков, содержащих определение функций (вне тела класса).
У меня в .h в целом только описание класса. А у меня она не маленькая и так. Я вообще изначально класс пилил не шаблонным и меня осенило, что я могу сильно всё упростить шаблонным параметром. П итогу нифиша ахахах
ну, для любых вообще, это же просто способ вынести реализацию функций, которую не вынесешь в отдельный TU (да, забыл пояснить, перед тем, как ты вызовешь шаблонную функцию, ты ДОЛЖЕН ее определить выше)
Ну вот да, я и написал, что я знаю в чем проблема чисто технически
Тогда суть вопроса не ясна)
Есть ли какой то финт ушами, позволяющий это обойти. Самый честный только в виде pimpl вижу
Окей, потыкаю-попробую, спасибо)
хотя, не, отмена, pimpl не решит эту проблему. Я поторпился с мыслями
It's used when you don't want the file that contains the interface of a module to contain all the gory implementation details. But you cannot write the implementation in a .cpp file because it's a template. So you do the best you can (not considering explicit instantiations and the like). For example https://stackoverflow.com/questions/44774036/why-use-a-tpp-file-when-implementing-templated-functions-and-classes-defined-i
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Интересненько, спасибо)
Это можно сделать для фиксированного набора шаблонных аргументов через явное инстанцирование, но это немасштабируемое решение
Я просто не разу не видел тип .tpp и даже хз стоит ли его использовать вообще 😅
Я тоже, почитай отсюда https://t.me/supapro/1162410
Интересненько. Надо будет поискать информацию об использовании .tpp. Не спроста ее нигде нет
Блин, никакого tpp нет - это просто кусок кода
Нельзя. Где-то во времена написания 11 стандарта пытались что-то придумать, но так и не смогли.
Обсуждают сегодня