小编jer*_*yin的帖子

C++将带有构造函数的对象插入到map中

我试图将方法插入到地图中,将一对插入到地图中工作正常,代码如下所示:

type insert(){
    map<int,MyClass> myMap;
    MyClass myObj(parameter);
    myMap.insert(pair<int,MyClass>(0,myObj));
    ...
    return myMap;
}
Run Code Online (Sandbox Code Playgroud)

但是,我决定使用另一种方式,基本上:

    map[key] = value;
Run Code Online (Sandbox Code Playgroud)

而且,它看起来像这样:

type insert(){
    map<int,MyClass> myMap;
    MyClass myObj(parameter);
    myMap[i] = myObj;
    ....
    return myMap;
 }
Run Code Online (Sandbox Code Playgroud)

编译器会给出一个错误说:"没有用于调用myObj :: myObj()的匹配函数,候选者是:"它给出了我自己定义的构造函数.

我的猜测是,当使用索引方式转换为地图时,如果我要传入一个对象,那么它将自动调用其默认构造函数而不带参数.但由于我已经有一个带参数的自定义构造函数,因此会产生错误.因此,我尝试创建一个映射,其中值是一个对象,该对象只有默认构造函数.这样,编译器就不会抱怨.

我的问题是我找不到任何确认我的想法的文件.如果它是正确的,为什么具有对象值的映射调用默认构造函数而不是现有构造函数?

c++ constructor map

6
推荐指数
2
解决办法
9082
查看次数

了解 C++ 函数指针在 HIP 中按引用传递

HIP是与NVIDIA的CUDA对应的AMD GPU编程模型。我有一个来自 HIP 源代码的代码片段,我无法完全理解。提醒一下,理解以下代码snippnet不需要任何HIP背景知识,但更多的是C++模板/函数指针的问题。

typedef int hipLaunchParm;    
template <typename... Args, typename F = void (*)(hipLaunchParm, Args...)>
inline void hipLaunchKernel(F&& kernel, const dim3& numBlocks, const dim3& dimBlocks,
                        std::uint32_t groupMemBytes, hipStream_t stream, Args... args) 
{
    hipLaunchKernelGGL(kernel, numBlocks, dimBlocks, groupMemBytes, stream, 
        hipLaunchParm{}, std::move(args)...);
}
Run Code Online (Sandbox Code Playgroud)

我对以下内容感到困惑:

  • 如果 F 是一个函数指针,为什么它需要在参数中被双重引用?
  • 第一个模板参数typename... Args有什么用?
  • hipLaunchParm只是integer的别名,但是在参数中调用时{}是什么意思呢?

c++ templates function-pointers hip

0
推荐指数
1
解决办法
192
查看次数

标签 统计

c++ ×2

constructor ×1

function-pointers ×1

hip ×1

map ×1

templates ×1