簡體   English   中英

專門化非模板類的成員函數模板

[英]Specializing member function template of a non-template class

成員函數模板bar的以下專業化有效嗎? 它可以在gcc 4.5.3和VS .NET 2008上進行編譯。我很困惑,因為我隱約記得要閱讀的內容是功能模板不能專門化。

struct Foo
{
    template<typename T>
    void bar();
};

template<typename T>
void Foo::bar(){}

template<>
void Foo::bar<bool>(){}

int main()
{
    Foo f;
    f.bar<char>();
    f.bar<bool>();
}

函數模板不能是部分專用的,但是可以顯式專用的,您的代碼完全正確。

在C ++ 11中考慮了功能模板的部分專業化,但由於可以使用功能模板重載來解決相同的問題, 因此被拒絕 但是,在執行此操作時需要注意一些注意事項

例:

template <typename T> void foo(T);
void foo(int);

foo(10);   // calls void bar(int)
foo(10.f); // calls void bar(T) [with T = float]
foo(10u);  // calls void bar(T) [with T = unsigned int]!!

對於您的情況,這種事情可能會起作用

struct Foo
{
    template<typename T>
    void bar(T dummy);

    void bar(bool dummy);
};

template<typename T>
void Foo::bar(T dummy) { }

void Foo::bar(bool dummy) { }

int main()
{
    Foo f;
    f.bar('a');
    f.bar(true);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM