1 c++ templates type-deduction c++17
我正在编写一个模板函数,它返回使用的向量的连续元素的差异std::minus
.
目前我有以下代码:
template <typename T>
auto diffs(std::vector<T> &nums)
{
typedef decltype(std::minus<T>()) diffType;
std::vector<diffType> differences;
differences.reserve(nums.size() - 1);
auto test = std::back_inserter<std::vector<decltype (std::minus<T>())>>;
std::transform(++begin(nums), end(nums), begin(nums), std::back_inserter(differences), std::minus<T>());
return differences;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用它
void test()
{
auto values = std::vector<int>{ 1,2,4,6,89,1456 };
auto differences = diffs(values);
}
Run Code Online (Sandbox Code Playgroud)
当我编译这个时,我得到:
binary '=': no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud)
我如何申报我的,typedef
以便它与我的工作正常back_inserter
?
这个:
decltype(std::minus<T>())
Run Code Online (Sandbox Code Playgroud)
要求构造一个默认的类型minus<T>
,这是正义的minus<T>
.你想要的是你调用它时会发生什么:
decltype(std::minus<T>()(nums[0], nums[0]))
Run Code Online (Sandbox Code Playgroud)
或者您可以使用类型特征:
std::invoke_result_t<std::minus<T>, T const&, T const&>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
69 次 |
最近记录: |