我在頭文件的命名空間中有一個類。該類需要一個模板類型,我只想要使用某些類型。下面舉例說明。命名空間中的私有類
文件a.hpp
// a.hpp
namespace a_ns {
template<class T>
class a {
// stuff
};
typedef a<double> a_double;
} // end of namespace
// stuff
文件b.hpp
// b.hpp
#include <a.hpp>
namespace b_ns {
typedef a_ns::a_double b;
}
文件main.cpp中
// main.cpp
#include "b.hpp"
int main() {
b_ns::b my_b; // <<<--- I LIKE this!
a_ns::a<float> my_a_which_is_not_allowed; // <<<--- I DO NOT LIKE THIS THOUGH! D:
}
所以你可以從更願意看到渴望出例如,最終目標是不允許最終用戶聲明class a
與float
作爲類型名稱, d只能使用具有特定類型的預定義類,如typedef a<double> a_double;
所聲明的。
我認爲上面的這個例子會允許這個,但是我錯了,因爲我可以創建一個a<float>
,因爲我包含了b.hpp
,它又包含a.hpp
!所以你看到了問題! (希望是?)
可能有一個簡單的解決方案,如果這是可能的話。
其實我喜歡這樣 - 我害怕沒有辦法打敗編程人員的麻煩。 –
@DieterLücking,一旦你克服了他們不得不故意將自己挖入洞中的事實,你開始擔心更多的擔心阻止它。如果他們想把自己搞砸,讓他們。如果那裏有東西能夠真正幫助他們,至少現在他們不需要黑客就可以達到目的。 – chris
或者Herb Sutter所說的:保護墨菲,而不是馬基雅維利 – TemplateRex