- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
以下代码:
$ cat test02.cpp
#include <string>
#include <numeric>
#include <cstdlib>
#include <list>
#include <iostream>
struct myadd :
public std::binary_function
<const std::string&,const std::string&,std::string>
{
std::string operator () (const std::string& x,const std::string& y) const {
return x+" "+y;
}
};
struct mymul :
public std::binary_function
<const std::string&,const std::string&,std::string>
{
std::string operator () (const std::string& x,const std::string& y) const {
return x+y;
}
};
std::string spliceme(
const std::list <std::string>& list1,
const std::list <std::string>& list2,
const std::binary_function
<const std::string&,const std::string&,std::string>& add,
const std::binary_function
<const std::string&,const std::string&,std::string>& mul
) {
return std::inner_product(list1.cbegin(),list1.cend(),list2.cbegin(),
std::string(""),add,mul);
}
int main() {
std::list <std::string> list1;
list1.emplace_back("First");
list1.emplace_back("Second");
list1.emplace_back("Third");
std::list <std::string> list2;
list2.emplace_back("Foerst");
list2.emplace_back("Annen");
list2.emplace_back("Tredje");
std::string result = spliceme(list1,list2,myadd(),mymul());
std::cout << result << std::endl;
return EXIT_SUCCESS;
}
生成编译器错误:
g++ -std=c++0x test02.cpp -o test02
In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.6.3/include/g++-v4/numeric:62:0,
from test02.cpp:2:
/usr/lib/gcc/i686-pc-linux-gnu/4.6.3/include/g++-v4/bits/stl_numeric.h: In function '_Tp std::inner_product(_InputIterator1, _InputIterator1, _InputIterator2, _Tp, _BinaryOperation1, _BinaryOperation2) [with _InputIterator1 = std::_List_const_iterator<std::basic_string<char> >, _InputIterator2 = std::_List_const_iterator<std::basic_string<char> >, _Tp = std::basic_string<char>, _BinaryOperation1 = myadd, _BinaryOperation2 = std::binary_function<const std::basic_string<char>&, const std::basic_string<char>&, std::basic_string<char> >]':
test02.cpp:29:101: instantiated from here
/usr/lib/gcc/i686-pc-linux-gnu/4.6.3/include/g++-v4/bits/stl_numeric.h:218:2: error: no match for call to '(std::binary_function<const std::basic_string<char>&, const std::basic_string<char>&, std::basic_string<char> >) (const std::basic_string<char>&, const std::basic_string<char>&)'
make: *** [all] Error 1
线路出现问题:
return std::inner_product(list1.cbegin(),list1.cend(),list2.cbegin(),
std::string(""),add,mul);
如果我直接实例化类 myadd 和 mymul:
return std::inner_product(list1.cbegin(),list1.cend(),list2.cbegin(),
std::string(""),myadd(),mymul());
一切都能正确编译和运行。我将函数 add 和 mul 传递给函数 spliceme 的方式有什么问题?
最佳答案
要么这样:
std::string spliceme(
const std::list <std::string>& list1,
const std::list <std::string>& list2,
const std::function<std::string(const std::string&,const std::string&)>& add,
const std::function<std::string(const std::string&,const std::string&)>& mul
) {
return std::inner_product(list1.cbegin(),list1.cend(),list2.cbegin(),
std::string(""),add,mul);
}
或者这个:
template<typename Add, typename Mul>
std::string spliceme(
const std::list <std::string>& list1,
const std::list <std::string>& list2,
const Add& add,
const Mul& mul
) {
return std::inner_product(list1.cbegin(),list1.cend(),list2.cbegin(),
std::string(""),add,mul);
}
让你的代码工作。第一个使用类型删除函数,第二个使用 template
仿函数。第一个让你把你的 body 从标题中分离出来,第二个允许改进内联。
关于c++ - 将 binary_function 传递给另一个函数内的 inner_product 时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17796415/
我在静态库 .a 中定义了一个 std::map,就像这样 ////////////////////////////////////// #import class CCImage; class I
template struct gSorting : public std::binary_function { bool operator() (int number, int n2)
我有一个字节数组,其中包含事件 ID 和一些 ID 的事件数据:{0x1, 0x2, 0x32}//例如,0x1 - eventId,0x2 - 它的数据,0x32 - 另一个事件 ID。 为了解析它
我正在使用 Visual Studio 2010 Beta 2(也尝试过使用 NetBeans),但我在以下代码中遇到了段错误: // One of the @link s20_3_3_compari
包括 #include using namespace std; int main() { binary_function operations[] = { plus(), minus(
std::binary_function现已弃用,将在 c++17 中删除.我搜索了不同的出版物,但我找不到替换它的确切方法。我想知道我应该如何在c++11中编写以下代码风格。 template i
我们目前正在使用一些 3rd 方包,这些包在内部使用了一些 std::binary_function、std::unary_function。您可能知道,这些函数在 C++14 中已被弃用,现在它们都
以下代码: $ cat test02.cpp #include #include #include #include #include struct myadd : public s
我阅读了有关二元和一元函数的教程。我了解它们的结构,但我无法想象在哪种情况下我需要这些功能。你能举个例子来说明它们的用法吗? http://www.cplusplus.com/reference/st
我注意到 std::binary_function is only a struct with typedefs .在链接中,它特别指出: binary_function does not defin
我有这个枚举(类) enum class conditional_operator { plus_op, or_op, not_op } 我想要一个代表这些映射的 std::m
我发现 binary_function 已从 C++11 中删除。我想知道为什么。 C++98: template struct less : binary_function { bool o
我注意到在c++17中binary_function被删除了。而且我不知道如何解决它。有人可以帮我改变结构吗?谢谢 我尝试通过谷歌搜索但找不到解决方案。Visual Studio 2019,C++17
我的 std::map 有一对“唯一键”和“唯一值”。我通常会为一个值找到一个键,并为一个键找到一个值。我已经知道使用 std::find_if + lambda 的方法,但是我想知道是否有更好的方法
1st 是的,我一直在使用 Visual Studio 2008,我相信这个错误是 Visual Studio 2008 特有的。 我正在尝试编写一个仿函数来比较我的结构中的 1 个成员,这样我就可以
我正在尝试编写一个函数来打印 minheap 和 maxheap 的内容,但我在使用比较器时遇到了问题。我尝试使用三元运算符,但它不起作用,因为 std::less 和 std::greater 是不
从 std::binary_function(或 std::unary_function)继承有什么好处? 例如我有这样的代码: class Person { public: Person(
我想尽可能避免代码重复。假设我有一个类,例如, class T { int val; bool operator < (const T& right) const { return v
我是一名优秀的程序员,十分优秀!