Drake
Default Scalars

Detailed Description

Similar to the Eigen library, many classes in Drake use a template argument to specify the numeric scalar type to use for computation.

We typically name that template argument <T>. For an example, see the class drake::math::RigidTransform.

Most scalar-templated classes in Drake only support a small, fixed set of scalar types:

When Drake documentation refers to "default scalars", it means all three of the types above.

Alternatively, reference to "default nonsymbolic scalars" means all except drake::symbolic::Expression.

For code within Drake, we offer Doxygen custom commands to document the <T> template parameter in the conventional cases:

All three commands assume that the template parameter is named T. When possible, prefer to use these commands instead of writing out a @tparam line manually.

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.

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...
 

Macro Definition Documentation

◆ DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS

#define DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS (   SomeType)
Value:
extern template SomeType<double>; \
extern template SomeType<::drake::AutoDiffXd>;

Declares that template instantiations exist for Drake's default nonsymbolic scalars.

This should only be used in .h files, never in .cc files.

◆ DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS

#define DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS (   SomeType)
Value:
extern template SomeType<double>; \
extern template SomeType<::drake::AutoDiffXd>; \
extern template SomeType<::drake::symbolic::Expression>;

Declares that template instantiations exist for Drake's default scalars.

This should only be used in .h files, never in .cc files.

◆ DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS

#define DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS (   SomeType)
Value:
template SomeType<double>; \
template SomeType<::drake::AutoDiffXd>;

Defines template instantiations for Drake's default nonsymbolic scalars.

This should only be used in .cc files, never in .h files.

◆ DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS

#define DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS (   SomeType)
Value:
template SomeType<double>; \
template SomeType<::drake::AutoDiffXd>; \
template SomeType<::drake::symbolic::Expression>;

Defines template instantiations for Drake's default scalars.

This should only be used in .cc files, never in .h files.