我是模板编程的新手,我有两个问题......希望有人可以帮助我.我试图使用可变参数模板生成另一个可变参数模板的新输入.换句话说,我有一堂课
template <std::size_t N, std::size_t... M>
class Class1 {
}
Run Code Online (Sandbox Code Playgroud)
我想使用N,M表示的整数值来生成一组新的std :: bitset类型输入到另一个模板类
template <typename T, typename... Ts>
class Class2 {
}
Run Code Online (Sandbox Code Playgroud)
所以例如,如果我使用Class1<10,20,25>我想在体内Class1创建一个
Class2<std::bitset<10>, std::bitset<20>, std::bitset<25>>
变量.使用C++ 11有一种简单的方法吗?
那么我的第二个问题是如何进一步抽象这一点,以便解包不是特定于std::bitset类?有没有办法修改Class1模板定义,以便我可以扩展我开发的一些任意模板类而不是std::bitset?
我对 docker 完全陌生。我有一个安装了 docker 的 Redhat 7 桌面。我现在想通过 docker 运行一个完整的 ubuntu-desktop 18.04 (包括它的 gnome GUI)。如何才能做到这一点?我一直在谷歌搜索有关在哪里可以下载 ubuntu 18.04 docker 映像(具有 GUI 支持)并运行它的说明/教程,但令人惊讶的是我找不到任何东西。有人能帮我吗?谢谢。
当您的代码使用 OpenMP 任务时,应该如何放置 try-catch 块?是否应该在每个任务中定义一个 try-catch 块,或者单个 try-catch 块是否可以包含所有任务?换句话说,考虑这段代码:
int main()
{
#pragma omp parallel
{
#pragma omp single
{
try
{
#pragma omp task
{ /*some code here*/ }
#pragma omp task
{ /*some code here*/ }
}
catch(Exception &e)
{
//I want to do something here whenever one of the tasks throws an exception
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想捕获其中一个任务抛出的任何异常,以便打印与该异常相对应的错误消息并中止程序,上面的代码是否正确?或者我是否需要在每个任务中定义一个 try-catch 块,如下所示?:
int main()
{
#pragma omp parallel
{
#pragma omp single
{
#pragma omp task
{
try
{ …Run Code Online (Sandbox Code Playgroud) 我正在 redhat8 上使用 g++8.5 编译我的代码,我注意到当我设置 OMP_SCHEDULE=static 时,然后在我的应用程序中 omp_get_schedule() 返回一个“单调”计划而不是“静态”计划。为什么会发生这种情况?如果我将 OMP_SCHEDULE 设置为其他内容(例如“动态”),那么我的应用程序会将其识别为“动态”。这是有问题的代码。有任何想法吗?谢谢
omp_sched_t kind;
int chunk_size;
omp_get_schedule(&kind, &chunk_size);
switch(kind)
{
case omp_sched_static:
{
schedule_msg = schedule_msg + "schedule=static, chunk_size="+std::to_string(chunk_size);
break;
}
case omp_sched_dynamic:
{
schedule_msg = schedule_msg + "schedule=dynamic, chunk_size="+std::to_string(chunk_size);
break;
}
case omp_sched_guided:
{
schedule_msg = schedule_msg + "schedule=guided, chunk_size="+std::to_string(chunk_size);
break;
}
case omp_sched_auto:
{
schedule_msg = schedule_msg + "schedule=auto, chunk_size="+std::to_string(chunk_size);
break;
}
default:
{
schedule_msg = schedule_msg + "schedule=monotonic, chunk_size="+std::to_string(chunk_size);
break;
}
}
Run Code Online (Sandbox Code Playgroud) 将多个线程同时读取类的静态constexpr成员变量是否安全?例如:
class A{
public:
//some code here
private:
static constexpr std::size_t x_ = 99;
}
Run Code Online (Sandbox Code Playgroud)
如果我创建多个Class类型的A对象,每个对象由不同的线程使用,那么每个C++ 11线程可以安全地独立读取成员变量x_而不使用任何锁定机制吗?
我有一个浮点数组(每个浮点数4个字节),我想将数据复制到一个字节数组(uint8_t)并将其视为字节.后来我可能想要将字节数据复制回浮点数组,并将其再次作为各种操作的浮点数处理.这在c ++中有效吗?换句话说,就像这样,我暂时将浮点数视为字节有效?
std::array<std::uint8_t, 40> b;
b.fill(0);
std::array<float,10> f;
f.fill(3.14);
std::memcpy(b.data(),f.data(),40);
std::array<float,10> f2;
f2.fill(0);
std::memcpy(f2.data(),b.data(),40);
for(std::size_t i=0;i<10;i++)
{
std::cout<<f2[i]<<std::endl; //now i want to access the float data
}
Run Code Online (Sandbox Code Playgroud) 我有以下C++代码和一个相当大的switch语句(我使用的是C++ 11编译器):
void function(std::size_t i, other_args)
{
switch(i)
{
case 0:
templatedfunction<0>(other_args);
break;
case 1:
templatedfunction<1>(other_args);
break;
case 2:
templatedfunction<2>(other_args);
break;
...............
//lots of other cases here
...............
case 100:
templatedfunction<100>(other_args);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里templatedfunction定义为
template<std::size_t T>
void templatedfunction(other_args){
//some code here
}
Run Code Online (Sandbox Code Playgroud)
这是用于描述简单概念的许多代码行(即,templatedfunction使用i与其模板化参数中传递的变量相同的值调用).在C++中有没有办法更紧凑地编写这段代码?应该有一种方法可以更紧凑地实现这个long switch语句....使用templatedfunction<i>(other_args)不会编译,因为它i是一个变量而不是编译时常量.谢谢.
我有一个 C++ 程序,其中某些模式的代码块不断重复,我想知道是否可以使用 C++ MACROS 作为预处理器来自动生成此代码。更准确地说,我有一些看起来像这样的代码块:
for(std::size_t i=0;i< lc_.size(); i++)
{
std::string str;
state::MsData lc = data->lc(i);
convert<data::ClassForLC>(lc.data(), str);
lc_[i] = data::ClassForLC(str);
}
Run Code Online (Sandbox Code Playgroud)
然后我可能有另一个看起来像这样的块:
for(std::size_t i=0;i< mmop_.size(); i++)
{
std::string str;
state::MvData mmop = data->mmop(i);
convert<data::ClassForMMOP>(mmop.data(), str);
mmop_[i] = data::ClassForMMOP(str);
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的一般模式是这样的:
for(std::size_t i=0;i< X_.size(); i++)
{
std::string str;
Y X = data->X(i);
convert<Z>(X.data(), str);
X_[i] = Z(str);
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以定义一个宏 REPLACE(X,Y,Z) 用我作为参数传递的任何文本替换上面代码中的 X,Y,Z ?注意:我使用 C++11。谢谢