我想創建一個類模板,ptrs_and_refs_only<T>
,它只能通過指針和引用進行操作。換句話說,這種類型的值應該被禁止,除了聲明爲friend
s類型的東西。如何確保某個類型的值只能由其朋友操作?
具體來說,我想編譯器發出一個錯誤,如果遇到這種類型作爲函數參數:
void foo(ptrs_and_refs_only<int> x); // error!
void bar(ptrs_and_refs_only<int> &x); // ok
void baz(ptrs_and_refs_only<int> *x); // ok
我知道,我可以讓ptrs_and_refs_only<T>
的拷貝構造函數private
,但沒有按在此代碼中似乎不會導致錯誤:
template<typename T>
class ptrs_and_refs_only
{
private:
ptrs_and_refs_only() {}
ptrs_and_refs_only(const ptrs_and_refs_only &) {}
};
void foo(ptrs_and_refs_only<int> x) {}
int main()
{
return 0;
}
此行爲是否可行?
該代碼不會導致錯誤,但我不認爲你可以從'main'調用'foo'而不會導致編譯器錯誤。 – 2012-01-12 01:41:43
@OliCharlesworth同意。不過,如果我可以禁止'''foo''的存在,那會很好。 – 2012-01-12 01:46:15
那麼,一個純粹的'虛擬'函數將不允許這個'foo',但是..你根本無法實例化那個類。 :) – Xeo 2012-01-12 01:48:37