Drake
Drake C++ Documentation
default_scalars.h File Reference
Include dependency graph for default_scalars.h:

Namespaces

 drake
 

Macros

Class template instantiation macros

These macros either declare or define class template instantiations for Drake's supported scalar types (see Default Scalars), either "default scalars" or "default nonsymbolic scalars".

Use the DECLARE macros only in .h files; use the DEFINE macros only in .cc files.

Parameters
SomeTypethe template typename to instantiate, including the leading class or struct keyword, but excluding the template argument for the scalar type.

Example my_system.h:

namespace sample {
template <typename T>
class MySystem final : public drake::systems::LeafSystem<T> {
...
};
} // namespace sample
class ::sample::MySystem);

Example my_system.cc:

#include "my_system.h"
class ::sample::MySystem);

See also System Scalar Conversion.

#define DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS(SomeType)
 Defines template instantiations for Drake's default scalars. More...
 
#define DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS(SomeType)
 Defines template instantiations for Drake's default nonsymbolic scalars. More...
 
#define DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS( SomeType)
 Declares that template instantiations exist for Drake's default scalars. More...
 
#define DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS(SomeType)
 Declares that template instantiations exist for Drake's default nonsymbolic scalars. More...
 
Function template instantiation macros

These macros define template function instantiations for Drake's supported scalar types (see Default Scalars), either "default scalars" or "default nonsymbolic scalars".

Use the DEFINE macros only in .cc files.

Parameters
FunctionPointersTuplea parenthesized, comma-separated list of functions to instantiate (provided as function pointers), including the template argument(s) for the scalar type. The template arguments T and U will be provided by the macro; the function will be instantiated for all combinations of T and U over the default scalars.

Example example.h:

namespace sample {
template <typename T>
double Func1(const T&);
template <typename T, typename U>
double Func2(const T&, const U&);
template <typename T>
class SomeClass {
...
template <typename U>
SomeClass cast() const;
...
};
} // namespace sample

Example example.cc:

#include "example.h"
namespace sample {
template <typename T>
double Func1(const T&) {
...
}
template <typename T, typename U>
double Func2(const T&, const U&) {
...
}
template <typename T>
template <typename U>
SomeClass<T>::SomeClass::cast() const {
...
};
// N.B. Place the macro invocation inside the functions' namespace.
&Func1<T>,
&Func2<T, U>,
&SomeClass<T>::template cast<U>
));
} // namespace sample
Note
In the case of an overloaded function, the &FunctionName<T> syntax is ambiguous. To resolve the ambiguity, you will need a static_cast.
#define DRAKE_DEFINE_FUNCTION_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS(FunctionPointersTuple)
 Defines template instantiations for Drake's default scalars. More...
 
#define DRAKE_DEFINE_FUNCTION_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS(FunctionPointersTuple)
 Defines template instantiations for Drake's default nonsymbolic scalars. More...