gpt4 book ai didi

c++ - 打印任何 vector 的内容

转载 作者:行者123 更新时间:2023-11-30 04:29:19 25 4
gpt4 key购买 nike

我有一个调试类,我在我的代码中使用它来打印各种东西。在这门课中,我重载了 operator()方便输出。我有几个operator() s 打印 vector 。当我添加模板版本时,我遇到了编译错误。

代码如下:

  template<class Type1>
inline debug&
operator()(const std::string& name,
typename std::vector<Type1>::const_iterator begin,
typename std::vector<Type1>::const_iterator end)
{
_stream << indent(internal) << "< " << name << " : [ ";
std::copy(begin, end, std::ostream_iterator<Type1>(_stream, " "));
_stream << "] >" << std::endl;

return *this;
}

我还有另一个 vector 打印功能:

  inline debug&
operator()(const std::string& name,
typename std::vector<uint32_t>::const_iterator begin,
typename std::vector<uint32_t>::const_iterator end)
{
_stream << indent(internal) << "< " << name << " : [ " << std::hex;
std::copy(begin, end, std::ostream_iterator<uint32_t>(_stream, " "));
_stream << "] >" << std::endl;

return *this;
}

在哪里indent()完全按照它说的去做。

这是编译错误:

../include/debug.hh:146:3: note: template<class Type1> relix::debug&    relix::debug::operator()(const string&, typename std::vector<_RealType>::const_iterator, typename std::vector<_RealType>::const_iterator)
../include/debug.hh:146:3: note: template argument deduction/substitution failed:
assembler.cc:78:64: note: couldn't deduce template parameter ‘Type1’

这里是 assembler.cc:78:

  log(D_C(tl._tokens), tl._tokens.begin(), tl._tokens.end());

在哪里D_C()是一个替换预处理器宏,用于提取变量名和 _tokensstd::vectortoken , 其中token重载了 operator<<() .

最佳答案

问题出在模板上:

template<class Type1>
inline debug&
operator()(const std::string& name,
typename std::vector<Type1>::const_iterator begin,
typename std::vector<Type1>::const_iterator end)
{
// ...

这里的问题是 Type1 不能被编译器推导出来。考虑实际推导类型需要什么:编译器必须用所有可能的类型实例化 std::vector,包括 std 的任何潜在实例化: :vector 判断函数的参数是否匹配。

最简单的解决方法是从签名中的显式要求中删除 vector 并将其转换为:

template<class Iterator>
inline debug&
operator()(const std::string& name,
Iterator begin,
Iterator end)
{
// ...

现在可以简单地推导出类型,无论函数的参数是什么。

关于c++ - 打印任何 vector 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9467065/

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