有没有办法找到我的代码中所有出现的 std::vector<bool> ?

问题描述 投票:0回答:1

我管理一个包含很多模板类的大型复杂代码。 我想禁止在代码中使用

std::vector<bool>
(因为这是编译问题的一个反复出现且痛苦的原因)。我可以 grep
std::vector<bool>
,但是当其他 tempplaces 类中使用的模板类实例化模板向量(结果是 bool 向量)时,我无法轻松找到。

是否有 gcc 警告、工具或技巧来查找代码实例化

std::vector<bool>
的情况?

c++ boolean c++17 stdvector
1个回答
0
投票

在代码中它可能看起来像这样:

#include <vector>
#include <type_traits>

template<typename T>
struct CurrentVersion
{
    std::vector<T> data;
};

template<typename T, typename U = std::enable_if_t<!std::is_same_v<bool,T>>>
struct RefactoredVersion /* in practice do not rename and keep using CurrentVersion, this is just to demo it */
{
};

int main()
{
    CurrentVersion<int> cv;
    RefactoredVersion<int> rv;

    CurrentVersion<bool> cvb;
    RefactoredVersion<bool> rvb; // <== no longer compiles (too few template arguments)
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.