在C++ 11中,他们可以简单地使用模板参数friend T.您还可以使用该参数中的朋友方法friend T::Method().
但是,你如何与模板参数的构造函数相关联?
class BeMyFriend
{
public:
BeMyFriend& operator=(const BeMyFriend& rhs) = default;
BeMyFriend(const BeMyFriend& rhs) = default;
};
template<class T>
class Test
{
friend T& T::operator=(const T&); //Works fine, no error
friend T::T(const T&); //error: prototype for 'BeMyFriend::BeMyFriend(const BeMyFriend&)' does not match any in class 'BeMyFriend'
};
int main()
{
Test<BeMyFriend> hmm;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我能够将模板参数的朋友operator=很好,但我不能和朋友在一起T::T(const T&).
我怎样才能friend T::T(const T&);上班?
编辑:这似乎与Make Friend在模板类的构造函数中解决的问题不同.那里的问题是在声明中处理循环模板参数.它不处理实际模板参数的构造函数.
它的类型Foo是普通的模板化类,而不是像 …
我有一个python脚本解析项目目录中的所有C++源文件,在文件中查找一些东西,然后生成一个文件.这个python脚本工作正常,但我希望它在构建我的C++项目之前自动运行.
所以基本上,我希望这个python脚本在每次构建之前运行,所以如果任何.h或.cpp文件已被更改.如果python脚本本身已被更改,我也希望它能运行.我有问题的python脚本,genenums.py与我的C++源文件在同一目录中,如main.cpp等.
我已经尝试过add_custom_command基于文档的实验,但我不能让cmake在任何实例中运行这个python脚本.我不确定如何使这项工作正确,因为我是cmake的新手.
这是我当前的cmake文件:
cmake_minimum_required(VERSION 3.9)
project(enum_test)
set(CMAKE_CXX_STANDARD 17)
include_directories(include)
find_package( PythonInterp 2.7 REQUIRED )
find_package( PythonLibs 2.7 REQUIRED )
add_custom_command(
COMMAND ${PYTHON_EXECUTABLE} genenums.py
DEPENDS genenums.py $(CMAKE_CURRENT_BINARY_DIR)
OUTPUT enums.h
WORKING_DIRECTORY $(CMAKE_CURRENT_BINARY_DIR)
COMMENT "Generating enums"
)
add_executable(enum_test main.cpp test.h test.cpp)
Run Code Online (Sandbox Code Playgroud)