在Java中,我們可以實現匿名類的interface
這樣實現接口:與++匿名類用C
import java.util.function.Predicate;
public class Test {
public static void main(String[] args) {
System.out.println(testIf("", new Predicate<String>() {
@Override
public boolean test(String s) {
return s.isEmpty();
}
}));
}
public static <T> boolean testIf(T t, Predicate<T> predicate) {
return predicate.test(t);
}
}
自從Java 8:
System.out.println(testIf("", String::isEmpty));
我們如何能做到這一點在C++? 我寫了下面的代碼,但我得到編譯錯誤:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
template <class T>
class Predicate
{
public:
virtual bool test(T) = 0;
};
template <class T>
bool testIf(T t, Predicate<T> predicate)
{
return predicate.test(t);
}
int main()
{
class : public Predicate <string> {
public:
virtual bool test(string s)
{
return s.length() == 0;
}
} p;
string s = "";
cout << testIf(s, p);
cin.get();
return 0;
}
錯誤:沒有的功能模板「testIf」實例相匹配的參數列表 參數類型有:(std::string
,class <unnamed>
)
這裏有什麼問題?還有其他方法可以做到嗎?
謝謝!
你可以看看http://stackoverflow.com/questions/991062/passing-unnamed-classes-through-functions – Prashant 2015-02-24 10:41:01