以下是特定于模板类类型的函数,如何自定义模板代码,使其不针对某些类型进行编译?如果问题不清楚,请看这个例子。
///** template class ***/
template<typename T>
class testClass{
testClass();
T parameter;
}
template<typename T>
void testClass<T>::print(){cout<<parameter.value<<endl;}
上述类应适用于以下类型:
//** types file **/
class paramtype1{
int value;
}
class paramtype2{
int value;
}
class paramtype3{
}
如您所见,paramtype3
没有值
,因此我得到一个编译错误,表示未定义值。我知道,如果我想专门化某个类型的模板类函数,我需要执行以下操作:
template<>
void testClass<paramtype1>::print(){cout<<parameter.value<<endl;}
但是,有没有办法反过来做,只排除某些类型?
我个人会排除使用某些类型的权限:
template <class T, class... Ts>
struct is_any : std::disjunction<std::is_same<T, Ts>...> {};
// https://stackoverflow.com/questions/17032310/how-to-make-a-variadic-is-same
template <typename T>
void do_something() {
static_assert(!is_any<T, int, bool>::value, "do_something<T> cannot be used with T as int or bool");
// code here
}
允许您添加自定义断言消息aswel,从而很容易意识到哪里出了问题。
如果要启用/禁用完整类/结构,可以使用SFINAE和部分专门化。
下面是一个C17示例
template <typename T, typename = void>
struct testClass;
template <typename T>
struct testClass<T, std::void_t<decltype(T::value)>>
{
testClass()
{ };
T parameter;
void print()
{ std::cout << parameter.value << std::endl; }
};
如果您只想启用/禁用print()
函数,您必须将其模板化;通过示例
template <typename U = T>
std::void_t<decltype(U::value)> print()
{ std::cout << parameter.value << std::endl; }
或者也
template <typename U = T>
std::void_t<decltype(U::value), std::enable_if_t<std::is_same_v<U, T>>>
print()
{ std::cout << parameter.value << std::endl; }
如果你想确保没有人能“劫持”解释模板类型调用的方法
testClass<paramtype3>{}.print<paramtype1>():
我试图为自定义帖子类型创建一个页面,但我无法真正实现。以下是我正在尝试的全部内容- 自定义帖子类型注册的functions.php片段 我使用名为单Tutorial.php的模板为这个自定义帖子类型模板。此外,在我的帖子显示中,我使用the_permalink()链接到帖子。 现在考虑一个标题为Test3的帖子现在在我的仪表板上,我看到它的PyMalink AS。 当我回显我得到的_permali
我正在做一个游戏,玩家在1-36之间选择6个数字 我要做的是创建一个新数组,该数组不包括6个选定的数字,并且新数组的长度为30。 这就是我所做的 生成的第一个数组: 这是我试图获得新数组的代码,但还不完美,因为从所选的6个数字中至少有1或2个数字仍然是新数组的一部分。 我做错了什么?
我想问,有没有可能限制我的模板函数,使它只接受我指定的几种类型?这就是如何告诉编译器在我使用cout< 更明确地说,这就是我要做的:
有人能帮我解决这个该死的pagenavi问题吗?我一直在尝试在stackoverflow和其他论坛上找到的所有可能的解决方案,但当我想访问pagenavi的第二页时,仍然会遇到404错误。 我尽可能地精简了代码。这应该管用,对吧? 更多信息:我正在使用一个自定义页面模板,网站上不同的自定义帖子类型,还有一个博客,其中包括panenavi(确实有效)。我也尝试重置永久链接每次我改变代码,也没有帮助。
从MinDoc v0.13及以上版本开始支持自定义模板(仅Markdown编辑器)。 创建自定义模板 用户可在编辑项目时将编辑器内的内容报错为模板: 点击保存按钮右侧的公文包按钮会弹出保存为模板的界面: 填写模板名称点击立即保存即可。 全局模板是指,在其他项目中可用,目前仅支持管理员保存全局模板,非管理员及时选中了全局,保存时也是仅项目内可用。 使用自定义模板 点击编辑器上的模板按钮可以显示选择模