我试图Predicate
在Java
on中写一个类的类似物C++
。结果,一些肮脏的东西出来了:
template <typename T>
class Predicate {
private:
Predicate<T> *other;
public:
virtual bool test(T &t) = 0;
Predicate<T> AND(Predicate<T> other);
Predicate<T> OR(Predicate<T> other);
Predicate<T> negate();
};
template<typename T>
Predicate<T> Predicate<T>::AND(Predicate<T> other) {
Predicate<T> *t = this;
class TmpPredicate : Predicate {
TmpPredicate() {
this->other = other;
}
bool test(T &t) {
return t->test(t) && other.test(t);
}
};
return TmpPredicate();
}
其余功能尚未实现。
总的来说,这一切都很糟糕,但我不知道如何正常进行。你能建议吗?
按照计划,这个类应该像Predicate
. Java
理想情况下,您不需要分配动态内存来使用它,使用动态内存应该Predicate
在其内部实现中实现。
例子:
int main() {
Predicate<char> p([](char c) { return c == 'A'; });
Predicate<char> p2([](char c) { return c == 'B'; });
cout << p('b') << '\n'; // 0
cout << p.NOT()('a') << '\n'; // 1
cout << p.AND(p2)('A') << '\n'; // 0
cout << p.OR(p2)('B') << '\n'; // 1
cout << p.OR(p2).OR(p)('A') << '\n'; // 1
cout << p.OR(p2).OR(p).OR(p2)('a') << '\n'; // 0
}
谁说写自己的语言
Predicate
是C++
不可取的?对我来说,结果证明它非常有用。