私はテンプレート関数をcppファイルの匿名の名前空間の中で、まったく異なるサイズのstd :: array型のヘルパー関数として持っていたいと思っていました。この関数は、この翻訳ユニットの外では使用できません。これはC++標準に準拠していcppファイルの匿名の名前空間の中にテンプレート関数を持つのは適切ですか?
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);
}
}
:私はMSVC 14.1(簡略化されたコード)でそれをしようとしたとき
は全く驚くべきことに私には、これはすぐに出て働いていましたか?
私が知っていたことから、テンプレートは常にヘッダーに宣言する必要があります。
複数の翻訳単位で使用されていても、「extern template」を使用してcppファイルにそれらを実装する方法があります。 https://msdn.microsoft.com/en-us/library/by56e477.aspx –
@ r-sahuこれが記述されているC++標準の引用/参照はありますか?素晴らしいことだ。 – Ident
@Ident、私はこの標準について特に言及しているのか分かりません。私は関連性のある何かを見つけることができるかどうか少し調べるでしょう。 –