【发布时间】:2020-10-07 02:00:49
【问题描述】:
这个问题主要是关于设计方法的,我想知道如何用现代C++语言解决这类问题。
我有一个定义如下的库函数(这是来自编译器的真实代码):
template <info::device param>
typename info::param_traits<info::device, param>::return_type
get_info() const;
为了调用这个函数,我可以这样写:
some_device.get_info<cl::sycl::info::device::device_type>()
其中cl::sycl::info::device::device_type 是一个实际参数。
支持的参数列表很长,我想要一组结果值(不同函数调用的结果)。
此时,我可以这样做:
some_device.get_info<cl::sycl::info::device::param1>()
some_device.get_info<cl::sycl::info::device::param2>()
...
some_device.get_info<cl::sycl::info::device::paramN>()
但是因为这很糟糕,我正在 C++ 11/14 中寻找更好的解决方案。
【问题讨论】:
-
由于返回类型似乎取决于模板参数(不同参数可能不同),您会将返回值存储在哪个集合中?
-
@HolyBlackCat 我想先将所有返回值转换为std::string,并将其存储在相应的集合中。
-
info::device_type如何匹配<info::device param>?你是说info::device::device_type吗? -
@PiotrSkotnicki
device可能是一个普通的(无范围的)enum。 -
可能类似于
template <info::device... Params> std::vector<std::string> f() { return {to_string(some_device.get_info<Params>())...}; }
标签: c++ c++11 templates c++14 sycl