Нет.Не с boost :: any и не с boost :: variable (не определяет ваше требование «Без перечисления всех возможных типов, которые могут поддерживать оператор +»).
Что вам нужно сделать, так это создать свое собственное.Концепция boost :: any довольно проста.Если вы посмотрите на документацию, у них есть ссылка на статью, объясняющую методику (в основном это идиома дескриптор / тело с полиморфизмом).Все, что вам нужно сделать, это решить, какой интерфейс должны иметь ваши различные объекты, и написать «любой» интерфейс, и это подразумевается соответственно.Нечто похожее на что-то вроде этого:
struct my_any
{
template < typename T >
my_any(T const& t) : pimpl(new impl<T>(t)) {}
...
some_type get_some_type() const;
...
private:
struct impl_base
{
....
virtual some_type get_some_type() const = 0;
};
template < typename T >
struct impl : impl_base
{
some_type get_some_type() const { return t.get_some_type(); }
impl(T const& t_var) : t(t_var) {}
....
};
boost::scoped_ptr<impl_base> pimpl;
};
some_type operator+ (my_any const& a, my_any const& b)
{
return a.get_some_type() + b.get_some_type();
}
Трудно представить, что оператор + будет делать с универсальными типами, поэтому я придумал что-то, что имеет для меня небольшой смысл.Вам, конечно, нужно будет изменить свои потребности.