我看到关于这个主题的一些复杂的讨论,但我没有做出应该是一个非常简单的代码工作.我找到了两种方法使它工作,但我对一些语法问题感到困惑.我只是想在列表中找到最小值.这有效:
using namespace std;
#include <iostream>
#include <list>
#include <algorithm>
int main(void)
{
auto init_list = {10, 20, 30};
list<int> alist(init_list);
list<int>::iterator minnum = min_element(begin(alist), end(alist));
cout << "The min in the list is: " << *minnum << endl;
return(1);
}
Run Code Online (Sandbox Code Playgroud)
但是还有min()的定义,它将initializer_list作为参数.我想我误解了它的语法.因为我已经定义了一个我可以调用的init_list
int minint = min(init_list);
Run Code Online (Sandbox Code Playgroud)
这很有效.但我不明白为什么.关于min的文档说这个调用应该是以下形式:
template< class T, class Compare >
T min( std::initializer_list<T> ilist, Compare comp );
Run Code Online (Sandbox Code Playgroud)
所以我不应该指定一个<比较运算符才能使用它(显然不是......为什么?)?但是,我不知道如何正确传递此操作符,并且无法得出明确的解释.以下各项都会产生各种语法错误:
int minint = min(init_list, operator<);
int minint = min(init_list, int::operator<);
Run Code Online (Sandbox Code Playgroud)
我该如何通过运营商?显然,在这种情况下并不重要,但如果我的列表不是一个int列表,而是一些带有重载运算符的自定义类型的列表,那么我是否需要传递一个运算符<?或者语法是否只是意味着类T必须定义比较运算符,但您不必在min函数调用中指定它?
我正在尝试做一些看起来应该相当常见的事情,但我找不到任何人讨论它。 stackoverflow 上的这篇文章与我想要做的类似,但不完全相同。
我有一个抽象基类:
#ifndef _ABASECLASS_H_
#define _ABASECLASS_H_
using namespace std;
#include <iostream>
#define CALL_MBR_FUNC(object, ptr_to_mem_func) ((object).*(ptr_to_mem_func))
class aBaseClass
{
public:
typedef void (aBaseClass::*aBaseClass_mem_func)();
int A;
int B;
aBaseClass();
aBaseClass(int a, int b);
virtual void function1(aBaseClass_mem_func infunc) = 0;
virtual void function2() = 0;
};
#endif /* _ACLASS_H_ */
Run Code Online (Sandbox Code Playgroud)
我有一个派生类:
#ifndef _ASUBCLASS_H_
#define _ASUBCLASS_H_
using namespace std;
#include <iostream>
#include "aBaseClass.h"
/* A simple class containing two ints and some functions to demonstrate passing via various methods. …Run Code Online (Sandbox Code Playgroud)