小编irf*_*fna的帖子

如何使模板参数的构造函数成为朋友?

在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是普通的模板化类,而不是像 …

c++ templates friend

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

如何在构建之前使CMake运行python脚本,以便为我的项目生成文件以在构建中使用?

我有一个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)

c++ cmake

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

标签 统计

c++ ×2

cmake ×1

friend ×1

templates ×1