maliput
|
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 maliput::drake::math::RigidTransform.
Most scalar-templated classes in Drake only support a small, fixed set of scalar types:
double
(always)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:
@tparam_default_scalar
for the default scalars.@tparam_nonsymbolic_scalar
for the default nonsymbolic scalars.@tparam_double_only
for only the double
scalar and nothing else.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.
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
Example #include "maliput/drake/common/default_scalars.h"
namespace sample {
template <typename T>
...
};
} // namespace sample
class ::sample::MySystem)
Example #include "my_system.h"
class ::sample::MySystem)
See also System Scalar Conversion. | |||
#define | DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS(SomeType) template SomeType<double>; | ||
Defines template instantiations for Drake's default scalars. More... | |||
#define | DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS(SomeType) template SomeType<double>; | ||
Defines template instantiations for Drake's default nonsymbolic scalars. More... | |||
#define | DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS(SomeType) extern template SomeType<double>; | ||
Declares that template instantiations exist for Drake's default scalars. More... | |||
#define | DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS(SomeType) extern template SomeType<double>; | ||
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
Example #include "maliput/drake/common/default_scalars.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 #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
| |||
#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... | |||
#define DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS | ( | SomeType | ) | extern template SomeType<double>; |
Declares that template instantiations exist for Drake's default nonsymbolic scalars.
This should only be used in .h files, never in .cc files.
#define DRAKE_DECLARE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS | ( | SomeType | ) | extern template SomeType<double>; |
Declares that template instantiations exist for Drake's default scalars.
This should only be used in .h files, never in .cc files.
#define DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS | ( | SomeType | ) | template SomeType<double>; |
Defines template instantiations for Drake's default nonsymbolic scalars.
This should only be used in .cc files, never in .h files.
#define DRAKE_DEFINE_CLASS_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS | ( | SomeType | ) | template SomeType<double>; |
Defines template instantiations for Drake's default scalars.
This should only be used in .cc files, never in .h files.
#define DRAKE_DEFINE_FUNCTION_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_NONSYMBOLIC_SCALARS | ( | FunctionPointersTuple | ) |
Defines template instantiations for Drake's default nonsymbolic scalars.
This should only be used in .cc files, never in .h files.
#define DRAKE_DEFINE_FUNCTION_TEMPLATE_INSTANTIATIONS_ON_DEFAULT_SCALARS | ( | FunctionPointersTuple | ) |
Defines template instantiations for Drake's default scalars.
This should only be used in .cc files, never in .h files.