是否可以在內聯constexpr函數內使用變量模板而不暴露變量模板本身?在內聯constexpr函數內使用可變模板而不暴露變量模板?
例如,該編譯和工作原理:
template<typename T> constexpr T twelve_hundred = T(1200.0);
template<typename T>
inline constexpr T centsToOctaves(const T cents) {
return cents/twelve_hundred<T>;
}
但是,這並不編譯:
template<typename T>
inline constexpr T centsToOctaves(const T cents) {
template<typename U> constexpr U twelve_hundred = U(1200.0);
return cents/twelve_hundred<T>;
}
的原因似乎是,模板聲明在塊範圍內不準(GCC給出了關於這方面的信息錯誤消息,鐺不)。
要更詳細地重複動機,該函數是內聯的並且在頭文件中定義,並且我不想在包含頭文件的任何位置公開變量模板。
我想我可以定義一個詳細的命名空間,並把變量模板放在那裏,但更好的是不暴露變量模板。也許這是不可能的。
認爲你可以做的最好的事情就是讓它成爲一個私人(靜態)成員,一個朋友你的免費功能。也就是說,我不認爲重複和樣板文件只是把它放在一個詳細的命名空間中是值得的。這是一個非常老套的習慣,而C++並不是真正的那種語言,你無論如何都不可能做出不好的行爲。 –