jjzjj

c++ - 如何使用 SFINAE 限制输入迭代器的重载

许多容器类模板有一个以计数和样本元素作为参数的构造函数,以及另一个以一对输入迭代器为参数的构造函数。insert等其他方法表现出相同的模式。当模板用整数类型实例化时,天真的实现会遇到麻烦,并且用一对整数调用构造函数(或其他方法):它们的类型相等,输入迭代器方法将给出有效的参数类型推导,但随后无法编译。我正在寻找一种优雅的方式来指定输入迭代器方法仅参与实际有效输入迭代器类型的(相等)参数类型的重载,或者至少不参与整数类型。我的印象是SFINAE是要走的路(但很高兴被告知不同),但是在阅读它时,坦率地说我不太了解规则,而且示例中提供的解决方案很难算得上优雅.作为附带限制,我希望我的代码能够

c++ - 这是 "Tag Dispatching"吗?

假设我有一些代码:voidbarA(){}voidbarB(){}voidfooA(){//Duplicatecode...barA();//Moreduplicatecode...}voidfooB(){//Duplicatecode...barB();//Moreduplicatecode...}intmain(){fooA();fooB();}我想删除fooA和fooB之间的重复代码我可以使用一些动态技术,例如传入bool参数、传递函数指针或虚拟方法,但如果我想要编译时技术,我可以这样做:structA{};structB{};templatevoidbar();template

c++ - 按通用引用返回

std::for_each按值接受并返回一个仿函数:templateUnaryFunctionfor_each(InputItfirst,InputItlast,UnaryFunctionf);虽然仿函数可以移入移出,但我感兴趣的是是否可以完全不涉及对象构造。如果我声明自己的my_for_each像这样:templateUnaryFunction&&my_for_each(InputItfirst,InputItlast,UnaryFunction&&f);里面my_for_each,调用f与std::forward(f)(...),我可以避免移动构造参数的成本,并且作为奖励能够尊重r