On 31 August 2011 22:03, Anders Logg <l...@simula.no> wrote: > On Wed, Aug 31, 2011 at 09:20:22PM +0200, Martin Sandve Alnæs wrote: >> On 31 August 2011 21:13, Anders Logg <l...@simula.no> wrote: >> > On Wed, Aug 31, 2011 at 09:10:21PM +0200, Martin Sandve Alnæs wrote: >> >> On 31 August 2011 16:12, Anders Logg <l...@simula.no> wrote: >> >> > I want to declare the following function: >> >> > >> >> > template<class S, class T> >> >> > void apply_markers(S<T>& sub_domains, T sub_domain) const; >> >> > >> >> > S is a template class (either MeshFunction or MeshMarkers) and T is a >> >> > primitive type. >> >> > >> >> > The above declaration does not work. How should it be declared? I've >> >> > tried various other combinations without success. >> >> >> >> >> >> If you can make T a typedef in S, this works: >> >> >> >> >> >> template<typename V> >> >> class Foo >> >> { >> >> public: >> >> typedef V value_type; >> >> }; >> >> >> >> template<typename S> >> >> void apply_markers(S & sub_domains, typename S::value_type sub_domain) >> >> { >> >> S s; >> >> } >> >> >> >> int main(int argc, char *argv[]) >> >> { >> >> Foo<int> a; >> >> apply_markers< Foo<int> >(a, 3); >> >> return 0; >> >> } >> > >> > Thanks. I think I just found another solution (remains to be seen, >> > currently compiling...). I simply do >> > >> > template<class S, class T> >> > void apply_markers(S& sub_domains, T sub_domain) const; >> > >> > S happens to be a template type over T, but it's not necessary to >> > write that out explicitly in the above function definition. >> >> Adding something like "typedef T value_type;" in S makes >> this more explicit, and is the standard approach in stl and boost. > > So we should have this in all our container template classes? > (MeshFunction, Array, MeshMarkers, maybe others)
A consistent convention like that may make some template stuff smoother, yes. Martin _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : dolfin@lists.launchpad.net Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp