gpt4 book ai didi

C++ 模板函数字符串类型不匹配?

转载 作者:行者123 更新时间:2023-11-28 03:22:08 27 4
gpt4 key购买 nike

我定义了一个函数:

template<class T> 
inline void _assert(const string& message, T expected, T actual);

我一直在用它来断言 2 个整数相等。但是当我有:

_assert("Modifies(15, v) for v value", "h", varTable->getVarName(list.at(0)));
^ returns std::string

它不起作用:

Error   1   error C2782: 'void _assert(const std::string &,T,T)' : template parameter 'T' is ambiguous  h:\dropbox\sch\cs3202\code\test\testqueryevaluator\testgetcandidatelist.cpp 183

为什么? 2个字符串不是同一类型?

最佳答案

你的函数 getVarName() 返回一个 std::string,但是你提供给 _assert() 的第二个参数是 const char[](衰减为 const char*)。

这两种类型不相同,因此类型推导无法找到 T 的有效匹配。

要修复它,您可以将字符串文字 "h" 包装到 std::string 对象中:

_assert(
"Modifies(15, v) for v value",
string("h"), // <== Wrap the string literal
varTable->getVarName(list.at(0))
);

或者您可以只修改您的 _assert() 函数模板,这样它就不会强制期望值和实际值属于同一类型:

template<typename T, typename Y> 
inline void _assert(const string& message, T expected, U actual);

但请注意:如果您在 _assert 中使用相等比较(operator ==)来比较预期值和实际值,请确保您的 T<如果要比较字符串,U 不会被推断为 const char*;否则,您的比较将不会达到您的预期。

关于C++ 模板函数字符串类型不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138486/

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