Null类,用于检索基础类型

时间:2015-05-18 06:35:39

标签: c# c++

我想知道如何在C ++中执行以下C#代码

object data;
private T GetJsonData<T>(String node)
{
   Type type=typeof(T);
   Type nType=Nullable.GetUnderlyingType(type);
   if(null!=nType)
   {
      if(node=="")
         return default(T);
      return (T)Convert.ChangeType(data,nType);
   } 
}

我认为std命名空间应该有一些类似的方法可以做同样的事情,但我找不到上面做某事的例子。

1 个答案:

答案 0 :(得分:1)

恕我直言,给定的代码不能直接转换为C ++,因为既没有中央转换类也没有可能检查类型是否可以具有nullptr值。当然,您可以使用类型特征等机制自行构建这两种行为:

http://www.cplusplus.com/reference/type_traits/

您可以使用函数重写轻松地自行构建nullptr检查器:

inline bool canbeNULL(bool){return false;} 
inline bool canbeNULL(int *){return true;} 
// and all others...

上面的代码如下:

T dummy;
if(canbeNULL(dummy))
{
  // do what you have to do
}

你也可以使用方法重载将不同的会话函数包装在一个自己的Convert类中。

在您的示例中,您使用将JSON转换为c ++对象的函数。 AS JSON只有几种不同的类型,我会用函数重载来解决你的问题。由于函数重载不适用于返回类型,因此必须将返回类型作为参数提供,如:

void GetJsonData(std::string strin, bool &returnvalue) {do the stuff}
void GetJsonData(std::string strin, int &returnvalue) {do the stuff}
void GetJsonData(std::string strin, double &returnvalue) {do the stuff}
// and more...
通过这种方式,您可以使用模板中的功能,模板将自行解析正确的调用。