C++ 11标准具有std::conditional<>用于在编译器时通过某种布尔条件选择类型的模板.如何进行相同的操作但是为变量初始化选择init值?类似于type a = (exp) ? first_value : second_value;.
我用我的模板:
template<bool B, typename T>
inline constexpr T&& conditional_initialize(T&& i1, T&& i2) {
return B ? std::move(i1) : std::move(i2);
}
Run Code Online (Sandbox Code Playgroud)
但它只能用于POD类型:int a = conditional_initialize<true>(1, 2);.对于数组初始化,此模板编译时出错.错误的编译示例:int a[] = conditional_initialize<true>({1, 2}, {3,4,5});
谁可以帮我模板?
属性如何处理 Dropbox C# SDK 中的错误?
我想使用通用方法来处理来自不同 API 调用的错误。此方法应该在顶级应用程序级别和多个 API 调用中使用。对于大多数云 API(例如 Microsoft OneDrive 和 Google Drive API),我可以做到这一点,因为有严格定义的列表(枚举将包含所有错误代码)并且只有一个用于错误处理的异常类。但在 Dropbox C# SDK 中,一切都相反!没有任何错误代码列表,但有十几个异常类(一个异常模板Dropbox.Api.ApiException<T>和模板参数的大量错误对象T)。查找文件操作的错误类计数示例 - http://dropbox.github.io/dropbox-sdk-dotnet/html/N_Dropbox_Api_Files.htm
我勒个去!如何处理所有这些?写巨catch()块?
更糟糕的是,它们中的大多数都使用相同的错误类型!
例如,Dropbox.Api.Files.LookupError描述“未找到”、“格式错误的路径”等错误的类是21的一部分!其他错误类别。为了处理简单的“未找到”错误,我必须能够捕获两打异常!正常吗?
那么,属性如何处理 Dropbox C# SDK 中的错误呢?
std::is_base_of<B, D>如果D是从B派生的,或者两者都是相同的非联合类,则C++ 11标准必须返回true.但是在VC++ 2010中,如果类型B是D类型的唯一基类,则stl实现模板返回true!这是一个错误吗?
在http://msdn.microsoft.com/en-us/library/bb982243(v=vs.100).aspx页面的示例部分
std::is_base_of<base, base> == true
Run Code Online (Sandbox Code Playgroud)
但这与VC++ 2010 STL实现不符.虽然它符合C++ 11标准的要求.哪个错误?