On Wed, Aug 31, 2011 at 09:10:21PM +0200, Martin Sandve Alnæs wrote: > On 31 August 2011 16:12, Anders Logg <[email protected]> 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. -- Anders _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : [email protected] Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp

