我編譯下與-fvisibility GCC下面的代碼模板參數=隱藏:問題與C++隱藏的知名度
template<class T> struct /*__attribute__ ((visibility("default")))*/ A {};
template<class T> struct B
{
B() __attribute__ ((visibility("default")));
};
template<class T> B<T>::B() {}
template class B<int>;
template class B<A<int> >;
如果我通過納米運行生成的目標文件| grep的B,我得到
000000000002b97c t B<A<int> >::B()
000000000002b972 t B<A<int> >::B()
000000000002b968 T B<int>::B()
000000000002b95e T B<int>::B()
即,B<int>
是可見的,但B<A<int> >
是看不見的。如果我取消將標記A<T>
標記爲可見,則可以看到B<A<int> >
。但是,我不想標記A的全部可見,因爲在實際代碼中A<T>
包含大量應該保持私有的方法。
爲什麼的A<T>
能見度影響B<A<T> >
知名度?我可以在不使A<T>
全部可見的情況下看到B<A<T> >
嗎?
在我的代碼A <>是一個大量的聯方法向量類,和我d喜歡避免爲了文件大小和加載時間而將它們全部導出。 – 2011-03-24 16:38:29