gpt4 book ai didi

c++ - 没有匹配的成员函数调用 'insert'

转载 作者:行者123 更新时间:2023-11-30 02:33:26 26 4
gpt4 key购买 nike

我在 basic_buffer 类上有以下方法声明:

const_iterator insert(const_iterator position, typename argument<value_type>::type val)

注意第二个参数的类型。我经常使用这个 argument 特性,它基本上决定了在接收模板参数时参数应该通过复制还是通过引用传递。在这种情况下,value_type 是模板参数 Ttypedef。例如,基本类型应该通过复制而不是 const 引用来传递。这是实现:

template <typename T> struct argument
{
typedef std::conditional<std::is_fundamental<T>::value || std::is_pointer<T>::value, const T, const T &> type;
};

请注意基本类型和指针类型如何计算为 const T 以及其他类型如何计算为 const T &。到目前为止,这一直很有效。

现在考虑以下函数:

template <class T>
void foo()
{
typedef basic_buffer<T> _storage_type;
typedef typename _storage_type::value_type _value_type;

_value_type value = 0;
_storage_type _storage;

_storage.insert(_storage.end(), value);
}

省略了一些细节。这是我得到的:

error: no matching member function for call to 'insert'
_storage.insert(_storage.end(), value);
~~~~~~~~~^~~~~~

令我惊讶的是这个重载版本没有被匹配:

note: candidate function not viable: no known conversion from '_value_type' (aka 'unsigned char') to 'typename argument<value_type>::type' (aka 'conditional<std::is_fundamental<unsigned
char>::value || std::is_pointer<unsigned char>::value, const unsigned char, const unsigned char &>') for 2nd argument
const_iterator insert(const_iterator position, typename argument<value_type>::type val)

让事情变得更加困惑的是,如果我将 value 转换为 _value_type(值得注意的是,这已经是它的类型)它会起作用:

_storage.insert(_storage.end(), static_cast<_value_type>(value));

所以我可以通过强制转换 value 来解决这个问题,但不是。这里发生了什么?

最佳答案

你有

typedef std::conditional<std::is_fundamental<T>::value || std::is_pointer<T>::value, const T, const T &> type;

所以类型是 std::conditional<std::is_fundamental<T>::value || std::is_pointer<T>::value, const T, const T &>

当你打电话时

_storage.insert(_storage.end(), value);

它正在尝试转换 valuestd::conditional<std::is_fundamental<T>::value || std::is_pointer<T>::value, const T, const T &>

您需要添加 ::type到条件以从条件中获取结果类型。

typedef std::conditional<std::is_fundamental<T>::value || std::is_pointer<T>::value, const T, const T &>::type type;

关于c++ - 没有匹配的成员函数调用 'insert',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465743/

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