Opened 8 years ago
#10027 new Feature Requests
Allow template parameters with types rather than hardcode typename in BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE (and friends)
| Reported by: | Owned by: | Joel de Guzman | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | fusion |
| Version: | Boost 1.55.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
Right now, the macro BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE creates
template<typename A, typename B>
struct MyStruct { ... };
from
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE( (A)(B), MyStruct, (A, foo) (B, bar) )
But I want to put the class template<int DIM> class Vector into a Boost Fusion Struct. So the struct should allow template parameters that are not typenames. I would like to be able to write the following:
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE(
(int DIM)(typename B),
MyStruct,
(Vector<DIM>, foo)
(B, bar)
)
// the above becomes
// template<int DIM, typename B>
// struct MyStruct { ... };
MyStruct<3, double> struct;
This does not currently work. The following is a working (but cumbersome) workaround (using C++11):
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE( (DIM)(B), MyStructImpl, (Vector<DIM::value>, foo) (B, bar) ) template<int DIM> using MyStruct = MyStructImpl<boost::mpl::int_<DIM>>; MyStruct<3, double> struct;
Maybe for backwards compatibility my proposed version of BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE where template parameters are declared as (int DIM)(typename B) should be named BOOST_FUSION_DEFINE_FLEXIBLE_TPL_STRUCT_INLINE.
