开发者

Full specialization of method template from class template

开发者 https://www.devze.com 2023-01-28 02:53 出处:网络
I know this subject should be pretty much dated by now, but I\'m having a tough time with this specific case.

I know this subject should be pretty much dated by now, but I'm having a tough time with this specific case.

St开发者_运维技巧raight to the point, this is what I want to do:

enum MyEnum
{
    E_1,
    E_2
};

template <MyEnum T>
class MyClass
{
    // method to be fully specialized
    template <typename U>
    void myMethod(U value);
};

// full specialization of method template from class template
// (or is this in fact partial, since I'm leaving T alone?)
template <MyEnum T>
template <>
void MyClass<T>::myMethod<int>(int value)
{
    std::cout << value << '\n';
}

Is this possible?


C++03 [$14.7.3/18] says

In an explicit specialization declaration for a member of a class template or a member template that appears in namespace scope, the member template and some of its enclosing class templates may remain unspecialized, except that the declaration shall not explicitly specialize a class member template if its enclosing class templates are not explicitly specialized as well.

So you need to specialize the enclosing class too.

Something like this would work.

template <>
template <>
void MyClass<E_1>::myMethod<int>(int value)
{
    std::cout << value << '\n';
}


Since you leave T, while specializing only function template, then what you're trying to do would be called partial specialization, because T is still templated and you can use it in your function. But unfortunately, partial template specialization of function (whether be it member function or non-member function) is not allowed. So your code would give compilation error.

Either you fully specialize by specializing the class template as well, or you don't at all.

0

精彩评论

暂无评论...
验证码 换一张
取 消