template <typename T>
struct Corresponding;
template <>
struct Corresponding<int> {
using CorrespondingT = boost::multiprecison::cpp_int;
};
template <typename T> using GetCorresponding = typename Corresponding<T>::CorrespondingT;
这可以用作
static_assert(std::is_same_v<GetCorresponding<int>, boost::multiprecision::cpp_int>); // true
其中,对应
是包含具有对应类型t
的别名的结构,该别名在编译时解析。这方面的另一个示例是std::remove_ptr_t
,它对应于t
我能在Haskell做一些类似的事情吗,例如。
iAmAnInteger :: getCorresponding Int -- Integer
?
我不熟悉Haskell的编译时类型功能,但这可能吗?
我对C++不是很流利,所以我不能百分之百确定您的示例代码在做什么,但乍一看,类型族和等式似乎是相似的。
{-# LANGUAGE TypeFamilies #-}
type family Corresponding a
type instance Corresponding Int = Integer
foo :: Corresponding Int ~ Integer => ()
foo = () -- compiles
bar :: Corresponding Int ~ Bool => ()
bar = () -- type error at any use site
baz :: Corresponding Int
baz = toInteger 3 -- compiles
quux :: Corresponding Int
quux = False -- type error
还尝试在专门化的中进行模板方法专门化: 这一次它编译,但调用原始方法,即 解决方案
我想用两种模板类型编写一个模板化函数:一种是bool,另一种是typename,我想专门研究typename。 这就是我想要的,但只针对T的几种类型: 没有bool在那里,我可以做这样的事情: 我搞不懂这句话的语法,而专门化方面的微软文档只涉及单一类型的情况。
我有一个通用算法,需要访问其模板类型的特征。有一个特征类可以专门用于提供这些特征。 在我的类中使用此算法时,我想将其与类中定义的私有类型一起使用。 然而,专门化只能发生在或全局范围内,而我的类是不可访问的。 是否有可能以某种方式专门化具有私有类型的模板,至少在可访问此类型的范围内? 也许可以将这个专门化声明为一个类?
关于下一个代码,我有一些问题: > 类专业化
我有一个模板基类,其模板参数类型为bool。此基类的构造函数参数列表取决于模板参数是true还是false。我想从这个类派生另一个模板类,它的模板参数是任意类型的。我需要这个派生类根据该类型的特征调用该基类的正确构造函数。 下面的例子并不包罗万象。无论是否为整数,基类模板bool可以是任何类型trait。此外,传递给派生类的模板参数的类型可以是任何类型。
我有一段代码,它是做模板专门化的常用模式。为了移除main函数第一行中为Processor1指定DataType1的要求,我想改为接收一个template模板参数。看起来using指令不支持分配“open”模板参数,而且我在web中找不到任何这样的示例(可能我没有使用适当的关键字进行搜索...) 所以问题很“简单”,我如何让这段代码编译呢?在FindDefaultProcessor中,使用type