我想转发函数调用和复制函数只有在绝对必要的时候。下面是我的泛型包装函数和函子:
template <typename F>
void wrapper (F func)
{
func ();
}
struct Functor
{
Functor() {}
void operator() () { /* do some work */ }
};
using safe_mutual_handler_type =
typename std::conditional<
std::is_reference<F>::value
, typename std::conditional<
std::is_const<typename std::remove_reference<F>::type>::value
, typename std::remove_const<typename std::remove_reference<F>::type>::type
, F&
>::type
, F&
>::type;
template <typename F>
void wrapper (F&& func)
{
safe_mutual_handler_type<F> tmp = func;
tmp ();
}
struct Functor {
Functor() {}
void operator() () const {}
};
问题是:如果函子有常量括号运算符,我如何在包装器中检查?另一个问题是包装器是否可以在没有大量类型特征TypeDefs行的情况下以更聪明、更紧凑的方式实现?(实际上,我担心的不是代码大小,而是代码可读性)。
如果只是想在引用的调用有效的情况下使用引用,请使用表达式sfinae:
template <typename F>
auto wrapper_ (F&& func, int) -> decltype(func())
{
func ();
}
template <typename F>
void wrapper_ (F func, ...)
{
func ();
}
template <typename F>
void wrapper (F&& f)
{
wrapper_(std::forward<F>(f), 0);
}
如果您只想在传递一个可变引用时复制/移动它(并且仅限于此):
template <typename F>
auto wrapper_ (F&& func, std::true_type)
{
func ();
}
template <typename F>
void wrapper_ (F func, std::false_type.)
{
func ();
}
template <typename F>
void wrapper (F&& f)
{
wrapper_(std::forward<F>(f), std::is_const<typename std::remove_reference<F>::type>());
}
我用直方图解决方案编写了这段代码,但用户将输入其矩阵,而不是在代码上输入矩阵。现在看看我做错了什么,除了柱状图的数学之外,一切似乎都正常。我做错了什么? 用户将输入行和列,然后一个接一个地输入矩阵中的每个值。然后代码将显示矩阵并计算所有1的最大大小矩形二进制子矩阵。
问题内容: 有以下选择: 我想获得具有最小值N_UM的行(仅一个),在这种情况下,其ID = 10(10 0)的行。 问题答案: 试试这个 -
我想找到最有效的方法来检查二进制搜索树中最小值的节点。我现在不想用某种编程语言来做,我只想考虑最有效的算法。 对此你怎么看: 我的问题是我应该如何深入挖掘,直到我得到最后一个左节点。我也试着解释这些步骤。你认为那是做这件事的最好方法吗?
问题内容: 如果不可变的类对象副本将与原始副本相等,那么为什么Java 中的类具有副本构造函数?这是一个错误还是背后有原因?在Java文档中,指定了: 问题答案: 复制字符串的主要原因是为了 “修剪行李” ,即仅将底层char数组修剪为必需的字符。 基本的char数组可能太大,因为通过调用创建字符串时,char数组可以在新的字符串实例和源字符串实例之间共享;偏移量指向第一个字符,并且包括长度。 我
问题内容: 我试图一次从一张桌子上得到2行。上周的最小日期时间(今天-7)和最晚的日期(今天)的一个。 我的桌子: 我可以通过以下方式选择上周的数据: 但我只想要第1行和第125行,因为这些是用于计算的行。所以我的问题是: 如何从上一个查询的结果中选择2行(带有MIN和MAX日期)? 问题答案: 您可以使用此: 编辑: 由于两台计算机完全有可能具有相同的值,因此应更新查询以在子句中也包含过滤器。我
我正在尝试使用javascript中的minimax算法实现一个连接四个AI。目前,速度很慢。除了我将要实现的alpha-beta修剪之外,我想知道是否值得将游戏状态散列为 他们的启发式评估 下一个最佳举措 我可以立即明白为什么2会很有用,因为有很多方法可以达到相同的游戏状态,但我想知道我是否也必须散列当前深度才能使其工作。例如,如果我以3的深度达到这种状态(所以只说再向前看4步),而深度为2,向