在C++ 11和/或C++中:
假设我给出了一个带有非类型参数包的模板:
template<int...>
void f();
Run Code Online (Sandbox Code Playgroud)
我正在编写另一个将实例化它的模板:
template<int... x>
void g()
{
???
f<???>();
}
Run Code Online (Sandbox Code Playgroud)
我希望g以排序顺序用x实例化f.
那是:
g<4,7,2,9,3,7>();
Run Code Online (Sandbox Code Playgroud)
应致电:
f<2,3,4,7,7,9>();
Run Code Online (Sandbox Code Playgroud)
可以这样做吗?如果是这样,最有效的方法是什么(由常数因素决定)?
我想创建一个类,其方法类似于std::map,但应在编译时进行排序。哪些constexpr容器适合存储键template<class K>和值template<class V>?
std :: vector不满足这些要求。
UPD:我们发现std::array有很多constexpr方法。这足以解决我的问题std::array<std::pair<K, V> >。但是问题仍然存在。
是否可以使用选择算法在c ++中编写编译时递归排序函数?
我想按升序将数组x从元素排序istart到元素iend.数组x有N元素.输入数组中的数据x仅在运行时才知道,因此数据只能在运行时进行排序.但是,我想生成C++代码,即sort_asc()在编译时对所有递归函数调用.此外,我想在CUDA设备功能中使用此代码.由于CUDA是C++的一个子集,只有少数扩展,我认为这是一个正确的问题.不幸的是,我不认为CUDA支持constexpr关键字,Boost和STL都不支持.
我想出了以下代码,用于按升序排序.
// sort in ascending order.
template< int istart, int N, int iend, int iend_min_istart >
inline void sort_asc
(
float *x
)
{
int min_idx = istart;
float min_val = x[ min_idx ];
#pragma unroll
for( int i=istart+1; i<N; i++ ){
if( x[ i ] < min_val ){
min_idx = i;
min_val = x[ i ];
}
}
swap( x[ …Run Code Online (Sandbox Code Playgroud)