这在 c++11 中可能吗?具有相同名称但具有模板的类。例如:结果和结果<T>

  • 本文关键字:结果 例如 c++11 这在 c++ templates
  • 更新时间 :
  • 英文 :


这在 c++11 中可能吗?两个同名但一个带有模板的类。 前任:

一个具有名称Result的类和另一个具有名称的类Result<T>使用,例如

return Result("Message");

Result<Date>("Message", date);

例如,我尝试了这个但没有成功:

template<>
class response
{
public:
bool sucess;
std::string message;
int code;  
};
template<typename T>
class response<T>
{
public:
T data;
};

几个C++11选项:

提供默认模板参数void并专门用于此。

template<class T = void>
class response
{
public:
bool success;
std::string message;
int code;
T data;
};
template<>
class response<void>
{
public:
bool success;
std::string message;
int code;
};

那么response<>将意味着response<void>并且不会有data成员。但是,您仍然必须编写response<>("Message")而不是response("Message")

(在您的实际代码中,您可能希望提供response构造函数,以便可以直接像这样初始化它们。


可用于增强此值的一个选项是工厂函数,因为函数重载集可以同时包含非模板化函数和函数模板。因此,例如,您可以有一个make_response函数:

// Assuming the appropriate response constructors exist
response<> make_response(std::string t_message)
{
return response<>{t_message};
}
template<class T>
response<T> make_response(std::string t_message, T t_data)
{
return response<T>{t_message, t_data};
}

然后make_response("Message")将创建一个没有data成员的response<>,也就是一个response<void>make_response("Message", date)将创建一个response<Date>有一个成员。

相关内容

  • 没有找到相关文章

最新更新