Нужно ли нам добавлять такое же пространство имен для -inl.h, если мы уже сделали это в файле .h

avatar
huahua xia
9 августа 2021 в 03:51
110
0
0

Я записываю шаблон в файл .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. Я хочу знать, какой из них предпочтительнее?

Источник
JaMiT
9 августа 2021 в 04:09
0

Проверяя, компилируется ли код вашего шаблона, убедитесь, что вы действительно создаете экземпляр шаблона. Ты сделал это? Возможно, добавьте исходный файл к вашему вопросу, который #include является вашим заголовком, а затем принудительно создаст экземпляр вашего шаблона?

prehistoricpenguin
9 августа 2021 в 06:29
0

Не очень понятно, что вы пытаетесь сделать. Пожалуйста, добавьте больше пояснений.

JaMiT
10 августа 2021 в 02:06
0

Подсказка: добавление строки template void test::mytest::log<> (int & int); после включения приведенного выше кода вызывает создание экземпляра вашего шаблона. С этим дополнением вы должны обнаружить, что вы можете не по-прежнему создавать файл, когда вы удаляете namespace test::mytest из -inl.h.

Ответы (0)