小编foo*_*foo的帖子

为什么extern"C"组C++类(不是标题)在这里?

我正在搜索SVM库并遇到BudgetedSVM.

在源代码中,我发现了一个不寻常的用法,就像这样:

#sample.h

#ifndef SAMPLE_H
#define SAMPLE_H

//no header included or namespace declared here

#ifdef __cplusplus
extern "C" {
#endif

//no header included or namespace declared too

class Sample: public Parent
{
public:
    Sample();
    ~Sample();

    type0 fun(type1 val1, type2 val2);
    ...
};

#ifdef __cplusplus
}
#endif

#endif // SAMPLE_H
Run Code Online (Sandbox Code Playgroud)

如图所示,标头中不需要额外的头或命名空间,这些都在cpp文件中.

这是我的想法:

  1. 为什么extern "C"(通常用于C接口)将C++类分组?这种用法对某些东西有用吗?

  2. 即使type0,type1type2出现了,自己的头在这里没有包括在内,但在cpp文件(如sample.h).当我调用类的Sample,但是,我必须包括这些报头(例如type0.h,type1.h,type2.h),这似乎很不方便.

c++ linkage

15
推荐指数
1
解决办法
1968
查看次数

OpenCV中使用的宏CV_OCL_RUN是什么?

我正在学习在OpenCV中实现的hog.cpp,当遇到宏并与之混淆时.CV_OCL_RUN

在找到的hog.cppdetectMultiScale(),您可以找到CV_OCL_RUN并在其中调用的方法ocl_detectMultiScale().比较detectMultiScale()ocl_detectMultiScale(),不仅他们的名字,但他们的工具非常相似.

这是我的问题:

  1. CV_OCL_RUN用于什么宏?它是出于测试还是其他目的?
  2. 既然detectMultiScale()并且ocl_detectMultiScale()在功能上如此相似,为什么后者嵌入前者?他们叫什么方式?

提前致谢!

c++ opencv

6
推荐指数
1
解决办法
1001
查看次数

将新子目录添加到 HKEY_LOCAL_MACHINE\Software\Classes 后如何更新 HKEY_CLASSES_ROOT

MSDN说:

类注册和文件扩展名信息存储在HKEY_LOCAL_MACHINEHKEY_CURRENT_USER键下。HKEY_LOCAL_MACHINE \Software\Classes项包含可应用于本地计算机上所有用户的默认设置。HKEY_CURRENT_USER \Software\Classes项包含仅适用于交互式用户的设置。HKEY_CLASSES_ROOT键提供了一个注册表视图,该视图合并了这两个源的信息HKEY_CLASSES_ROOT还为为以前版本的 Windows 设计的应用程序提供此合并视图。

这是否意味着如果我添加一个子项HKEY_LOCAL_MACHINE\Software\Classes(例如新的文件扩展名),其容器HKEY_CLASSES_ROOT将自动相应更新?

如果没有,我该怎么办?

c++ windows winapi

2
推荐指数
1
解决办法
2564
查看次数

为什么《Effective Modern C++》第 25 条中说“不会出现临时 std::string 对象”?

在Effective Modern C++的Item 25(170p~171p)中,代码如下:

\n\n
class Widget {\npublic:\nvoid setName(const std::string& newName) // set from\n{ name = newName; } // const lvalue\nvoid setName(std::string&& newName)     // set from\n{ name = std::move(newName); }          // rvalue\n\xe2\x80\xa6\n};\n\nw.setName("Adela Novak");\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

当 setName 的版本采用通用引用时,字符串文字“Adela Novak”将被传递给 setName,在那里它将被传送给 w 内的 std::string 的赋值运算符。因此,w\xe2\x80\x99s\n name 数据成员将直接从字符串\n 文字分配;不会出现临时 std::string 对象

\n
\n\n

我不明白为什么如果调用采用通用引用的 setName 版本, “不会出现临时 std::string 对象”。newName不应该被创建为临时 std::string 吗?

\n

c++ string c++11

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

标签 统计

c++ ×4

c++11 ×1

linkage ×1

opencv ×1

string ×1

winapi ×1

windows ×1