我试图将方法插入到地图中,将一对插入到地图中工作正常,代码如下所示:
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()的匹配函数,候选者是:"它给出了我自己定义的构造函数.
我的猜测是,当使用索引方式转换为地图时,如果我要传入一个对象,那么它将自动调用其默认构造函数而不带参数.但由于我已经有一个带参数的自定义构造函数,因此会产生错误.因此,我尝试创建一个映射,其中值是一个对象,该对象只有默认构造函数.这样,编译器就不会抱怨.
我的问题是我找不到任何确认我的想法的文件.如果它是正确的,为什么具有对象值的映射调用默认构造函数而不是现有构造函数?
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)
我对以下内容感到困惑:
typename... Args有什么用?