enable_if()以禁用模板化类的静态成员函数声明

问题描述 投票:0回答:1

我正在尝试在模板类中声明函数,以便函数声明取决于模板类型参数。

template<typename T>
struct Block
{
    static bool parse(int32_t index, 
                      const typename std::enable_if<std::is_class<T>::value, T>::type& value);

    static bool parse(int32_t index, 
                      typename std::enable_if<!std::is_class<T>::value, T>::type value);
....

};

因此,我想将Block<uint16_t>Block<std::string>parse()声明为:

bool parse(int32_t index, const std::string& value);
or
bool parse(int32_t index, uint16_t value);

但是我遇到错误:'enable_if' cannot be used to disable this declaration ...typename std::enable_if<!std::is_class<T>::value, T>::type value);

您能帮我正确声明函数吗?谢谢。

c++ templates sfinae
1个回答
0
投票

Enable_if仅在推论的上下文中起作用。在您的示例中,推论是在类类型时间完成的。到您使用这些功能时,T已经是已知的,因此没有任何可推论的内容。

© www.soinside.com 2019 - 2024. All rights reserved.