我想知道如何在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
命名空间应该有一些类似的方法可以做同样的事情,但我找不到上面做某事的例子。
答案 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...
通过这种方式,您可以使用模板中的功能,模板将自行解析正确的调用。