gpt4 book ai didi

c++ - typedef 是否应该同时出现在类定义和类声明中?

转载 作者:搜寻专家 更新时间:2023-10-31 00:06:24 25 4
gpt4 key购买 nike

我正在学习 C++。我知道 C++ 比大多数其他语言更冗长,但是在结构/类声明中定义 typedef 然后在结构/类定义中再次定义让我思考是否没有更好的或 typedef 的更中心位置,它只需定义一次,以及这是否遵循被认为是 C++ 最佳实践的内容。我在网上找不到任何关于此的特别信息。

typedef 移动到更全局的位置似乎不合适,并且 typedef 都用于结构中方法的定义和实现。

//--ProductFilter.h--
struct ProductFilter {
typedef std::vector<Product*> Items;
static Items by_color(Items items, Color color);
};

//--ProductFilter.cpp--
typedef std::vector<Product*> Items;
Items ProductFilter::by_color(Items items, Color color) {
Items result;
for (auto& item : items)
if (item->color == color)
result.push_back(item);
return result;
}

最佳答案

您不需要在类声明和类定义中定义typedef。你这样做的原因是当你这样做的时候

Items ProductFilter::by_color(Items items, Color color) {
Items result;
for (auto& item : items)
if (item->color == color)
result.push_back(item);
return result;
}

返回类型的 Items 不在类的范围内,因此 Items 需要是全局范围内的名称。如果你使用

ProductFilter::Items ProductFilter::by_color(Items items, Color color) {
Items result;
for (auto& item : items)
if (item->color == color)
result.push_back(item);
return result;
}

然后你就不再有这个问题了,你可以在类声明中使用 typedef。


您不需要在 ProductFilter::Items 中执行的原因

ProductFilter::by_color(Items items, Color color)

是因为 ProductFilter:: 将您置于类的范围内,因此您可以使用类中定义的名称而无需限定它们。

关于c++ - typedef 是否应该同时出现在类定义和类声明中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57994479/

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