Ich wollte eine Template-Funktion in einem anonymen Namespace einer cpp-Datei haben, rein als Hilfsfunktion für std :: array-Typen unterschiedlicher Größe. Diese Funktion darf außerhalb dieser Übersetzungseinheit nicht verwendet werden.Ist es richtig, eine Template-Funktion in einem anonymen Namespace einer cpp-Datei zu haben?
Ganz überraschend für mich, arbeitete diese sofort aus, wenn ich es in MSVC versuchte 14.1 (vereinfachte Code):
namespace
{
template<std::size_t SIZE>
bool isPushed(std::uint32_t id, std::array<std::uint32_t, SIZE>& states)
{
if(id >= states.size())
{
return false;
}
return ((states[id] & 32U) > 0U);
}
}
dies den C++ Standard entspricht?
Von dem, was ich wusste, müssen Vorlagen immer deklariert werden (und oft auch implementiert) in einem Header, warum nicht in diesem Fall?
Auch wenn es in mehreren Übersetzungseinheiten verwendet wird, gibt es Möglichkeiten, sie manchmal in cpp-Dateien mit 'extern template' zu implementieren. https://msdn.microsoft.com/en-us/library/by56e477.aspx –
@ r-sahu Haben Sie ein Zitat/Verweis auf den C++ - Standard, wo dies beschrieben ist? Wäre großartig. – Ident
@Ident, ich weiß nicht, dass der Standard speziell über diese Situation spricht. Ich werde ein bisschen graben, um zu sehen, ob ich etwas Relevantes finden kann. –