我有一个模板函数,我想从几个.cpp文件中调用它。通常,我会把这个模板函数写在.h文件中并#include它,但我听说过C++20模块,很好奇如何使用这个新的C++20功能导入/导出它。
//latuile_test_json_output.cpp
template <unsigned N>
void latuile_test_json_output(const vector<MyRect> &input_rectangles,
int (&edges)[N][2],
const vector<MyRect> &expected_rectangles,
const char* test_name,
int test_number)
{
...
}
您的API是C++,但受C风格代码的影响很大。这个N
模板参数是完全无用的。
由于您使用的是C++20,只需使用std::span
即可完成:
void latuile_test_json_output(const vector<MyRect> &input_rectangles,
std::span<std::array<int, 2> edges,
const vector<MyRect> &expected_rectangles,
std::string_view test_name,
int test_number)
{
...
}
// or if you think std::array is to much:
void latuile_test_json_output(const vector<MyRect> &input_rectangles,
std::span<int[2]> edges,
const vector<MyRect> &expected_rectangles,
std::string_view test_name,
int test_number)
{
...
}
在此表单中,函数不再是模板,因此从dll导出此函数没有问题。
注意,std::span
有各自的构造函数来处理c样式数组:std::span<T、 范围>:span-cppreference.com
模板<std::size_t N>
constexpr span(element_type(&arr([N](noexcept;(4(