gpt4 book ai didi

c++ - 模板特化 enable_if

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:26 25 4
gpt4 key购买 nike

我正在尝试以这种方式专门化模板:

class PropertyBase
{
public:
SfPropertyBase(string name)
{
Name = name;
}

virtual ~SfPropertyBase() {}

string Name;

virtual bool FromString(Object* obj, string str) = 0;

};


template< typename T>
class Property : public SfPropertyBase
{
public:
Property(string name) : SfPropertyBase(name)
{
//specific to Property stuff
}



template<typename U = T>
typename std::enable_if<(std::is_class<U>::value && std::is_pointer<U>::value), bool>::type
FromString(Object* obj, string str)
{
//do something
return true;
}

template<typename U = T>
typename std::enable_if<!std::is_class<U>::value || !std::is_pointer<U>::value), bool>::type
FromString(Object* obj, string str)
{
//do something
return true;
}
}

然后,当我尝试初始化此类的实例时:

 auto prop = new Property<int>("IntProperty");

我得到 invalid new-expression of abstract class type Property<int> .我明白 PropertyBase 中有一个抽象函数, 但我也为 Property 提供这两个专业, 其中T是一个类,而它不是。

这是怎么回事,如何解决?

注意:我要实现的是专精FromString如果 T 是类/指针以及所有其他情况。

最佳答案

Property中的FromString都是函数模板,不能override非模板virtual基类的功能。 (事实上​​函数模板不能是 virtual functions )。

您可以在 Property 中添加另一个非模板 FromString;您可以使用关键字 orverride 确保覆盖.例如

bool FromString(Object* obj, string str) override {
return FromString<>(obj, str);
}

LIVE

关于c++ - 模板特化 enable_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56232098/

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