gpt4 book ai didi

c++ - 如何模板化外部数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:19 25 4
gpt4 key购买 nike

我创建了一个代码文件来保存我所有的全局变量,其中之一是一个像这样的数组:

全局.cpp

#include <array>

array<string, 3> arr = {"value1", "value2","value3"};

我在另一个代码文件中测试数组值,如下所示:

测试数组.cpp

#include <iostream>
#include <array>

template <size_t N>
void TestingArrays(const array<string, N>& ArrT);

void ArrayTester()
{
extern array<string,3> arr;

array <string, 2> localarr = {"v1" ,"v2"};

TestingArrays(localarr);
TestingArrays(arr);
}

template <size_t N>
void TestingArrays(const array<string, N>& ArrT)
{
for (auto it = ArrT.cbegin(); it != ArrT.cend(); ++it)
{
cout << "Testing " << *it << endl;
}
}

除了一件事,一切都很美好。我在许多其他地方使用这个全局数组 (Arr)。

这意味着如果我需要更改变量的数量(在此示例中有 3 个),我需要对所有代码文件执行相同的操作... ...疯狂...

我想使用这样的模板:

测试数组.cpp

...
template <size_t N>
extern array<string,N> arr;
...

...但它没有编译。

有人有解决这个问题的秘诀吗?

最佳答案

using 语句可以使这更容易。然后你可以在多个地方使用 myArr 但只改变一次大小:

//header.h
#include <array>
#include <string>

using myArr = std::array<std::string, 3>;

extern myArr arr;

接下来将全局的定义放在一个新文件中:

//myarr.cpp
#include "header.h"

myArr arr = {"value1", "value2","value3"};

最后在其他编译单元(.cpp文件)中使用:

//main.cpp
#include "header.h"

#include <iostream>
#include <array>

template <size_t N>
void TestingArrays(const std::array<std::string, N>& ArrT);

void ArrayTester()
{
//extern array<string, 3> arr; // global var doesn't need to be declared here if the header is included

std::array<std::string, 2> localarr = {"v1" ,"v2"};

TestingArrays(localarr);
TestingArrays(arr);
}

template <size_t N>
void TestingArrays(const std::array<std::string, N>& ArrT)
{
for(auto it = ArrT.cbegin(); it != ArrT.cend(); ++it)
{
std::cout << "Testing " << *it << std::endl;
}
}

int main() {
auto value = arr[1];
ArrayTester();
return 0;
}

关于c++ - 如何模板化外部数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com