我想以给定格式将#include <functional>
#include <iostream>
#include <cassert>
int foo(double d) { return d; }
double bar(double d) { return 2*d; }
struct Result {
union {
int i_res;
double d_res;
};
enum { IS_INT, IS_DOUBLE } u_tag;
Result(Result const&) = default;
Result(int i) : i_res{i}, u_tag{IS_INT} {}
Result(double d) : d_res{d}, u_tag{IS_DOUBLE} {}
Result& operator=(Result const&) = default;
auto& operator=(int i)
{ i_res = i; u_tag = IS_INT; return *this; }
auto& operator=(double d)
{ d_res = d; u_tag = IS_DOUBLE; return *this; }
};
int main() {
std::function<Result(double)> cb;
cb = foo;
auto r = cb(1.0);
assert(r.u_tag == Result::IS_INT);
std::cout << r.i_res << '\n';
cb = bar;
r = cb(2.0);
assert(r.u_tag == Result::IS_DOUBLE);
std::cout << r.d_res << '\n';
return 0;
}
转换为array
:
hash
答案 0 :(得分:5)
use strict;
use warnings;
use Data::Dumper;
my @array = ('a',1,2,3,4,'b',6,7,8);
my %hash;
my $r;
tr/0-9//c ? $r= ($hash{$_}=[]) : push(@$r, $_) for @array;
print Dumper \%hash;
输出
$VAR1 = {
'b' => [
6,
7,
8
],
'a' => [
1,
2,
3,
4
]
};