gpt4 book ai didi

c++ - 我如何专门化这个模板成员函数?

转载 作者:太空狗 更新时间:2023-10-29 20:16:27 25 4
gpt4 key购买 nike

我有这个设置:

class DontUse;

template<class T,class U = DontUse, class V = SomeStandardType>
class Foo
{
public:
void bar(U &uh);
};

当 U 设置为 DontUse 时,我希望 bar 是一个空函数。在所有其他情况下,我希望 bar 有一些实现。我尝试使用专门化来执行此操作,但此代码(我意识到它在某种程度上是不正确的)无法编译:

template<class T,class V> void Foo<T,DontUse,V>::bar(DontUse &none){}
template<class T,class U,class V> void Foo<T,U,V>::bar(U &uh)
{
//do something here
}

错误信息是这样的(MSVC10):

1>path_to_project: error C2244: 'Foo<T,U,V>::bar' : unable to match function definition to an existing declaration

它指向第一个模板特化的行。

如何正确执行此操作?

这是实际的代码,尽管它被简化为相关的极简部分:

    struct DontUse;

template<typename Derived, typename Renderer = DontUse, typename TimeType = long>
class Gamestate
{
public:

void Render(Renderer &r);

};

template<typename Derived, typename TimeType> void Gamestate<Derived, DontUse,TimeType>::Render( DontUse){}
template<typename Derived, typename Renderer, typename TimeType> void Gamestate<Derived,Renderer,TimeType>::Render(Renderer &r)
{
static_cast<Derived*>(this)->Render(r);
}

最佳答案

您不能特化模板的单个成员。你必须专门化类(class)本身:

class DontUse;

template<class T, class V>
class Foo<T, DontUse, V>
{
   public:
     void bar(DontUse)
{ }
};

关于c++ - 我如何专门化这个模板成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9502197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com