我正在搜索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文件中.
这是我的想法:
为什么extern "C"(通常用于C接口)将C++类分组?这种用法对某些东西有用吗?
即使type0,type1并type2出现了,自己的头在这里没有包括在内,但在cpp文件(如sample.h).当我调用类的Sample,但是,我必须包括这些报头(例如type0.h,type1.h,type2.h),这似乎很不方便.
我正在学习在OpenCV中实现的hog.cpp,当遇到宏并与之混淆时.CV_OCL_RUN
在找到的hog.cpp中detectMultiScale(),您可以找到CV_OCL_RUN并在其中调用的方法ocl_detectMultiScale().比较detectMultiScale()和ocl_detectMultiScale(),不仅他们的名字,但他们的工具非常相似.
这是我的问题:
CV_OCL_RUN用于什么宏?它是出于测试还是其他目的?detectMultiScale()并且ocl_detectMultiScale()在功能上如此相似,为什么后者嵌入前者?他们叫什么方式?提前致谢!
MSDN说:
类注册和文件扩展名信息存储在HKEY_LOCAL_MACHINE和HKEY_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将自动相应更新?
如果没有,我该怎么办?
在Effective Modern C++的Item 25(170p~171p)中,代码如下:
\n\nclass 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");\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n当 setName 的版本采用通用引用时,字符串文字“Adela Novak”将被传递给 setName,在那里它将被传送给 w 内的 std::string 的赋值运算符。因此,w\xe2\x80\x99s\n name 数据成员将直接从字符串\n 文字分配;不会出现临时 std::string 对象。
\n
我不明白为什么如果调用采用通用引用的 setName 版本, “不会出现临时 std::string 对象”。newName不应该被创建为临时 std::string 吗?
\n