The
BoostFusionVariadicUserExtension extends the
BoostFusionUserExtension of
BoostFusion using the variadic templates of
CeePlusPlusEleven.
This makes it very easy for users to define
HomogeneousContainers and
HeterogeneousContainers for
CeePlusPlus and also define keywords which can be used to access the members of the container.
The structure, types and keywords are defined at compile time but the contents can vary at run time.
This is an illustration of the way in which
BoostFusion combines run time and compile time features.
I have done a lot of work on several versions of this extension, but in fact there are a powerful set of macros within
BoostFusion which do the equivalent job. --
JohnFletcher
Implementation
BoostFusion already has an adapter for the
std::tuple in
CeePlusPlusEleven. If no keywords are needed this is sufficient. A
variadic_tuple is build on top to provide keyword access. There are a set of default keys,
first,
second etc and the user can define keys which can be used.
Example
namespace test_keys
{
struct Start;
struct End;
struct Text;
}
int main()
{
using namespace test_keys;
typedef boost::mpl::vector<Start, End, Text> test_key_types;
typedef vtuple<std::string,std::string,std::string> test_type;
std::string start("Start"), end("End"),test(" of tests of variadic tuple");
test_type test_messages(start,end,test);
std::cout << "===============================================" << std::endl;
std::cout << at_c<0>(test_messages) << at_key<third>(test_messages) << std::endl;
std::cout << "===============================================" << std::endl;
std::cout << at_c<1>(test_messages)
<< test_messages.any_key<Text,test_key_types>() << std::endl;
std::cout << "===============================================" << std::endl;
return 0;
}
CategoryBoost