gpt4 book ai didi

c++ - 在实现文件中使用 typedef 来缩短类型签名的负面后果是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:50 26 4
gpt4 key购买 nike

我正在用 C++ 做我的第一个真正的项目,它是一个简单的 CSV 解析器(目前处于非常早期的阶段),我在头文件中有以下内容:

class CsvReader {
public:
// Actions to commit on each iteration of the CSV parser
enum Action { ADD_CHAR, ADD_FIELD, NONE };

// The possible states for each cell of a CSV
enum State { START, IN_FIELD, IN_QUOTED_FIELD, IN_QUOTED_QUOTE };

// Create the reader from a file
explicit CsvReader(File& f);

// Get a row from the CSV
std::vector<std::string> get_row();
private:
State m_state;
LineReader m_lr;
std::tuple<State, Action, bool> next(State s, const char& c);
};

当我想实现 next 函数时,我发现在枚举之前不断地输入 CsvReader:: 真的很烦人,因为它使代码变得冗长.所以不要在实现中有这样的东西

std::tuple<CsvReader::State, CsvReader::Action, bool> next(CsvReader::State s, const char& c) {
// more usage of CsvReader::
}

我做了

typedef CsvReader::State State;
typedef CsvReader::Action Action;
std::tuple<State, Action, bool> CsvReader::next(State s, const char& c) {
// function signature is much shorter and don't need to use CsvReader::
}

除了我不能在文件中调用任何其他 StateAction 之外,这样做会有任何后果吗?有没有更好的解决方案?

最佳答案

取而代之的是:

typedef CsvReader::State State;
typedef CsvReader::Action Action;
std::tuple<State, Action, bool> CsvReader::next(State s, const char& c) {
// function signature is much shorter and don't need to use CsvReader::
}

你可以这样做:

auto CsvReader::next(State s, const char& c)
-> std::tuple<State, Action, bool>
{
// function signature is much shorter and don't need to use CsvReader::
}

对于单独编译的实现文件,第一种方法没有任何特别的问题,但它笨拙且冗长。


顺便说一句,const char& c 没有意义。通常,通过对 const 的引用传递对于小于指针的类型没有意义,因为它会导致地址在机器代码级别向下传递。只需使用 const char c

关于c++ - 在实现文件中使用 typedef 来缩短类型签名的负面后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921761/

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