类型的显式命名空间在 C++ 中不起作用?

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

我在 Visual Studio 19 中有一个 C++20 控制台项目,具有发布配置和 /MT 标志。 我在项目中明确指定类型的命名空间。 当我创作时

std::string Foo, 

它创建 std::string 类型。到目前为止,一切都很好。 然而,当我创建

std::vector <std::string> Bar,

它创建了一个

std::vector<cv::String>
类型,这会导致不良后果。 cv 命名空间来自 OpenCV4。不仅来自不同的命名空间,类型本身也以大写“S”开头。 我的项目中的任何地方都没有任何“使用命名空间”或任何其他“使用”。

有什么想法吗?

我尝试在该行之前使用“using namespace std”,以防万一,但是,正如预期的那样,它不起作用。

我已经预料到了

std::vector <std::string> Bar 

创建一个

std::vector <std::string>

打字,我做错了什么?

c++ visual-studio opencv visual-c++ namespaces
1个回答
1
投票

cv::String
std::string
其实是同一个东西。

来自

opencv2/core/cvstd.hpp

namespace cv {
typedef std::string String;
}

您可以通过以下方式验证:

#include <type_traits>

static_assert(std::is_same_v<std::string, cv::String>, "");
© www.soinside.com 2019 - 2024. All rights reserved.