Я записываю шаблон в файл .h
и хочу поместить конкретную логику в файл -inl.h
. Мне интересно, нужно ли мне добавить такое же пространство имен для моего -inl.h
?
Это мой файл Test.h
, в котором я определил функцию (не класс).
#pragma once
namespace test::mytest {
template <typename T, typename Func>
void log(T& logger, Func func);
}
#include "Test-inl.h"
Это мой файл -inl.h
:
#pragma once
// Do I really need to put "namespace test::mytest" in -inl.h?
namespace test::mytest {
template <typename T, typename Func>
void log(T& logger, Func func) {
// some logic here
}
}
Похоже, я все еще могу собрать файл, если удалю namespace test::mytest
из -inl.h
. Я хочу знать, какой из них предпочтительнее?
Проверяя, компилируется ли код вашего шаблона, убедитесь, что вы действительно создаете экземпляр шаблона. Ты сделал это? Возможно, добавьте исходный файл к вашему вопросу, который
#include
является вашим заголовком, а затем принудительно создаст экземпляр вашего шаблона?Не очень понятно, что вы пытаетесь сделать. Пожалуйста, добавьте больше пояснений.
Подсказка: добавление строки
template void test::mytest::log<> (int & int);
после включения приведенного выше кода вызывает создание экземпляра вашего шаблона. С этим дополнением вы должны обнаружить, что вы можете не по-прежнему создавать файл, когда вы удаляетеnamespace test::mytest
из-inl.h
.