auto在C++ 14标准中,通用lambda如何工作(关键字作为参数类型)?
它是基于C++模板的,每个不同的参数类型编译器生成一个具有相同主体但替换类型(编译时多态)的新函数,还是更类似于Java的泛型(类型擦除)?
代码示例:
auto glambda = [](auto a) { return a; };
Run Code Online (Sandbox Code Playgroud) 有没有办法将auto作为参数传递给另一个函数?
int function(auto data)
{
//DOES something
}
Run Code Online (Sandbox Code Playgroud) gcc 4.9允许使用以下代码,但gcc 4.8和clang 3.5.0拒绝它.
void foo(auto c)
{
std::cout << c.c_str();
}
Run Code Online (Sandbox Code Playgroud)
我进入warning: ISO C++ forbids use of 'auto' in parameter declaration [-Wpedantic]4.9但是在4.8和clang我得到error: parameter declared 'auto'.
是否可以创建通用的C++函数foo?
foo(Object bar, Object fred)
{
//code
}
Run Code Online (Sandbox Code Playgroud)
如果识别出两个对象,则比较它们并返回比较值,否则返回一些其他值以表示无法进行比较?
我要求在对排序类进行泛化的情况下,在这种情况下,您可以使用此方法,并且在派生要排序的新对象时,可以添加到此foo函数,该方法用于对新类型的Object进行排序.
bool isEven(int val) {
return val % 2 == 0;
}
bool isOdd(int val) {
return val % 2 != 0;
}
template<class Iterator>
int count_function(Iterator start, Iterator end, auto criteria) {
int count = 0;
for (; start != end; ++start) {
if (criteria(*start)) {
count++;
}
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
上面是我的代码,自动在条件给出错误之前“现在允许此处自动”。我想为此功能提供isEven / isOdd标准。
这是为什么?
我已经尝试过int,bool-这会返回更多问题。