Connecting Tech Pros Worldwide Forums | Help | Site Map

What is wrong with this code ? (template class)

Anonymous
Guest
 
Posts: n/a
#1: Sep 3 '07
I have been trying to write a template class for a shared memory
container, over the last few days - but I keep getting numerous compiler
errors e.g:


Error: syntax error : identifier 'myStaticShmemAllocator<void>'
Error: 'AllocationPolicy' : undeclared identifier


Here is the truncated code below -

// template Header file
extern shared_memory static_shmem;
extern shared_memory dyn_shmem;


template <class T>
struct myStaticShmemAllocator
{
static T* Allocate(const size_t blocksize, const bool zeroed=true)
{
return static_shmem.allocate(blocksize, zeroed);
}

static void DeAllocate(T *ptr)
{
if(ptr);
static_shmem.free(ptr) ;
}
};



template <class T>
struct myDynamicShmemAllocator
{
static T* Allocate(const size_t blocksize, const bool zeroed=true)
{
return dyn_shmem.allocate(blocksize, zeroed);
}

static void DeAllocate(T *ptr)
{
if(ptr);
dyn_shmem.free(ptr) ;
}
};



template <class ValueType, template <class SharedMemoryTypeclass
AllocationPolicy= myStaticShmemAllocator<void
class static_shmemHashTable
{
//Impl
};


//////// Code to test templates
struct MyStruct { int x; int y;};

int main(int argc, char* argv[])
{
//implicit creation in static shmem (using dflt tplt arg)
myShmemHashTable<MyStructa_static ;

//explicit creation in static shmem
myShmemHashTable<MyStruct, myStaticShmemAllocator<void a1_static ;

//explicit creation in dynamic shmem
myShmemHashTable<MyStruct, myDynamicShmemAllocator<void a_dynamic;
}


xtrigger303@gmail.com
Guest
 
Posts: n/a
#2: Sep 3 '07

re: What is wrong with this code ? (template class)


On Sep 3, 1:19 pm, Anonymous <no.re...@here.comwrote:
Quote:
I have been trying to write a template class for a shared memory
container, over the last few days - but I keep getting numerous compiler
errors e.g:
>
Error: syntax error : identifier 'myStaticShmemAllocator<void>'
Error: 'AllocationPolicy' : undeclared identifier
>
Here is the truncated code below -
>
// template Header file
extern shared_memory static_shmem;
extern shared_memory dyn_shmem;
>
template <class T>
struct myStaticShmemAllocator
{
static T* Allocate(const size_t blocksize, const bool zeroed=true)
{
return static_shmem.allocate(blocksize, zeroed);
}
>
static void DeAllocate(T *ptr)
{
if(ptr);
static_shmem.free(ptr) ;
}
>
};
>
template <class T>
struct myDynamicShmemAllocator
{
static T* Allocate(const size_t blocksize, const bool zeroed=true)
{
return dyn_shmem.allocate(blocksize, zeroed);
}
>
static void DeAllocate(T *ptr)
{
if(ptr);
dyn_shmem.free(ptr) ;
}
>
};
>
template <class ValueType, template <class SharedMemoryTypeclass
AllocationPolicy= myStaticShmemAllocator<void
class static_shmemHashTable
{
//Impl
>
};
>
//////// Code to test templates
struct MyStruct { int x; int y;};
>
int main(int argc, char* argv[])
{
//implicit creation in static shmem (using dflt tplt arg)
myShmemHashTable<MyStructa_static ;
>
//explicit creation in static shmem
myShmemHashTable<MyStruct, myStaticShmemAllocator<void a1_static ;
>
//explicit creation in dynamic shmem
myShmemHashTable<MyStruct, myDynamicShmemAllocator<void a_dynamic;
>
>
>
}- Hide quoted text -
>
- Show quoted text -
IMHO
Quote:
template <class ValueType, template <class SharedMemoryTypeclass
AllocationPolicy= myStaticShmemAllocator<void
class static_shmemHashTable
this should become

template <class ValueType, template <class SharedMemoryTypeclass
AllocationPolicy= myStaticShmemAllocator >
class static_shmemHashTable

since it's a template< typename class you should not specifiy the
templated typename or else you're giving a precise type not a
templated class

also the code down below should be stripped of <voidafter
myStaticShmemAllocator and myDynamicShmemAllocator

Hope it helps.
FB

Closed Thread