Возникла задача - реализовать простой "паттерн" (не в глобальном смысле, а в смысле идиомы для одного отдельно взятого проекта), который бы позволил ограничивать аргумент отдельно взятой функции некоторым набором заранее известных типов. С помощью буста решилось вот так:
#include <boost/mpl/list.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/utility/enable_if.hpp>
struct A {};
struct B {};
struct C {};
struct D {
typedef boost::mpl::list<A, B> good_types;
template<class T>
void func(
T const& x,
typename boost::enable_if<
typename boost::mpl::contains<good_types, T>::type
>::type* dummy = 0) {
}
};
int main() {
D d;
d.func(A());
d.func(B());
d.func(C()); // тут ошибка компиляции - можно только A и B
return 0;
}
Без буста, очевидно, строчек на 100 больше было бы.
No comments:
Post a Comment