Hi,
I'm trying to write a wrapper over some of boost::interprocess and I want to have a function like this:
template <typename T, typename... Args>
T* Wrapper::createStruct(const std::string& name, Args&&... args)
{
return m_shm->construct<T>(name.c_str())(std::forward<Args>(args)...);
}
This fails to compile as it seems boost::interprocess uses its own varargs scheme when I try to create
the following struct in the SHM through this wrapper function:
struct Custom
{
Custom(int a, int b)
: m_a(a),
m_b(b)
{
}
int a;
int b;
}
int main()
{
...
Custom* c = shm->createStruct("Custom", 1, 2);
}
The error message:
/usr/include/boost/interprocess/detail/named_proxy.hpp:79:7: error: no matching function for call to ‘test_sharedmemory::sharedmemory_custom::test_method()::Custom::Custom()’
{ new((void*)mem)T(boost::forward<Args>(get<IdxPack>(args_))...); }
^
/usr/include/boost/interprocess/detail/named_proxy.hpp:79:7: note: candidates are:
/home/james/dev/infinityplus/test/common/shm/sharedmemory/main.cpp:136:7: note: test_sharedmemory::sharedmemory_custom::test_method()::Custom::Custom(int, int)
Custom(int one, int two)
^
/home/james/dev/infinityplus/test/common/shm/sharedmemory/main.cpp:136:7: note: candidate expects 2 arguments, 0 provided
Is there any way I can get this to work? I'd rather my wrapper's interface used std only.
boost 1.55
c++11
g++ 4.8.2
TIA,
James