我有一个这样的课:
template<class T>
class AdjacencyList {
public:
void delete_node(const T&);
protected:
const typename std::vector<T>::const_iterator _iterator_for_node(
const std::vector<T>&, const T&
);
};
template<class T>
void AdjacencyList<T>::delete_node(const T& node) {
_nodes.erase(_iterator_for_node(_nodes, node));
}
template<class T>
const typename std::vector<T>::const_iterator AdjacencyList<T>::_iterator_for_node(
const std::vector<T>& list, const T& node
) {
typename std::vector<T>::const_iterator iter =
std::find(list.begin(), list.end(), node);
if (iter != list.end())
return iter;
throw NoSuchNodeException();
}
Run Code Online (Sandbox Code Playgroud)
显然,std::vector::erase()不能拿一个const_iterator,但std::find()需要一个.我可以抛弃它在const返回std::find()时返回的迭代器的性能std::vector::erase(),但有效的C++教会我const_cast怀疑.
还有另一种方法吗?我无法相信从向量中移除元素这一常见的东西应该需要类型体操.:)
我有一些C++代码需要在解析某个文件头失败时生成错误消息.在这种情况下,我需要确保标头中的某个4字节字段是"OggS",如果不是,则返回错误消息,例如"invalid capture_pattern:'FooB';期望'OggS'".我的代码看起来像这样:
const string OggPage::parseHeader(void) {
read(fd, capture_pattern, sizeof(capture_pattern)); // error handling omitted
if (strncmp(capture_pattern, CAPTURE_PATTERN, sizeof(capture_pattern)) != 0) {
char err[256];
snprintf(err, sizeof(err), "Failed to read %d bytes from file descriptor %d: %s\n", sizeof(capture_pattern), fd, err);
return err;
}
return "Everything was A-OK!";
}
Run Code Online (Sandbox Code Playgroud)
从其他数据类型构建字符串的标准C++习惯用法是什么?我不是printf(3)在这里坚持这种风格的格式,所以请随意提出任何可行的方法.
我有一个迁移,它使用add_index以下内容为现有表添加索引:
add_index :foo, [:foo_type, :bar_id, :baz_id], :unique => true
Run Code Online (Sandbox Code Playgroud)
但是,我的字段足够长,超过了最大的InnoDB密钥长度.根据Anders Arpteg对如何增加MySQL 5.1密钥长度的回答?,我需要像这样生成SQL:
CREATE UNIQUE INDEX `index_matches_on_foo_and_bar_id_and_baz_id` ON `matches` (`foo`(100), `bar_id`(100), `baz_id`(100))
Run Code Online (Sandbox Code Playgroud)
我可以用漂亮的Rails-y方式做到这一点,还是我必须坚持在迁移中使用原始SQL?
我有一个MySQL 5.0数据库,其中包含几个包含超过50M行的表.但我怎么知道这个?当然,通过运行"SELECT COUNT(1)FROM foo".对包含58.8M行的一个表的查询需要10分钟才能完成!
mysql> SELECT COUNT(1) FROM large_table;
+----------+
| count(1) |
+----------+
| 58778494 |
+----------+
1 row in set (10 min 23.88 sec)
mysql> EXPLAIN SELECT COUNT(1) FROM large_table;
+----+-------------+-------------------+-------+---------------+----------------------------------------+---------+------+-----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------+-------+---------------+----------------------------------------+---------+------+-----------+-------------+
| 1 | SIMPLE | large_table | index | NULL | fk_large_table_other_table_id | 5 | NULL | 167567567 | Using index |
+----+-------------+-------------------+-------+---------------+----------------------------------------+---------+------+-----------+-------------+ …Run Code Online (Sandbox Code Playgroud) 我正在研究一个C++类,它提供了用于网络的BSD套接字的抽象.我想定义一个ISocket由CSocket和实现的接口MockSocket(后者用于单元测试).我知道我需要定义我希望实现类提供为纯虚拟的方法,即
class ISocket {
public:
virtual int Socket(int domain, int type, int protocol) = 0;
};
Run Code Online (Sandbox Code Playgroud)
我担心的是是否ISocket可以实例化一类类型.我的直觉告诉我,任何具有至少一个纯虚方法的类都是一个抽象类(即接口)并且无法实例化,但我心里有一种琐碎的担心,我需要对自动生成做一些事情. C++编译器将提供的构造函数和析构函数(当你记住你在其中读到的所有东西时,有效的C++既是礼物也是诅咒 - 当你不记得时).
我是否正确地执行此操作,或者是否有最佳实践来定义C++中我不遵循的接口?
我需要一个薄包装功能莲的sqs/receive-message,以添加默认的等待时间.该函数需要一个队列URL,然后接受任意数量的可选命名参数,这些参数应该传递给sqs/receive-message未触及的.我想这样称呼它:
(my-receive-message "https://sqs.us-east-1.amazonaws.com/123/test-q"
:max-number-of-messages 10
:delete true)
Run Code Online (Sandbox Code Playgroud)
这应该会导致这样的调用sqs/receive-message:
(sqs/receive-message :queue-url "https://sqs.us-east-1.amazonaws.com/123/test-q"
:wait-time-seconds 20
:max-number-of-messages 10
:delete true)
Run Code Online (Sandbox Code Playgroud)
这是我发现自己想要经常做的事情,但我还没有找到一个好方法.这是否有惯用的方法?
关于使用Prismatic/schema来验证函数,我有一个非常简单的问题.我有一个具有单个键的映射的模式,其值是一个函数,它将Bar模式作为其单个参数并返回任何内容(用于副作用):
(require '[schema.core :as s])
(def Bar {:baz s/Int})
(def Action :???)
(def Foo {:action Action})
Run Code Online (Sandbox Code Playgroud)
问题是,我该如何定义Action?我试过这个:
(require '[schema.macros :as sm])
(def Action (sm/=> s/Any Bar))
Run Code Online (Sandbox Code Playgroud)
这看起来很有希望,但我不能让它失败验证:
(s/explain Action)
;=> (=> Any {:baz Int})
;; This should fail
(s/validate Foo {:action :anything-goes})
;=> {:action :anything-goes}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我在core_test中阅读了文档和测试,但我无法弄清楚如何做到这一点.
我正在研究一些Clojure代码,其中我有一个像这样的实体树:
foo1
+-- bar1
| +-- baz1
| +-- baz2
+-- bar2
+-- baz3
foo2
+-- bar3
+-- baz4
Run Code Online (Sandbox Code Playgroud)
如果我的荒谬的ASCII艺术没有意义,我有一个foos列表,每个foos可以有零个或多个条形,每个条形可能有零个或多个bazes.
我想要做的是生成一个哈希映射,其中键是baz ID,值是条形码 ID; 即上图将是:
{"baz1" "bar1", "baz2" "bar1", "baz3" "bar2", "baz4" "bar3"}
Run Code Online (Sandbox Code Playgroud)
我的数据结构如下所示:
(def foos [
{:id "foo1" :bars [
{:id "bar1" :bazes [
{:id "baz1"}
{:id "baz2"}
]}
{:id "bar2" :bazes [
{:id "baz3"}
]}
]}
{:id "foo2" :bars [
{:id "bar3" :bazes [
{:id "baz4"}
]} …Run Code Online (Sandbox Code Playgroud) 我有这样的命名空间:
(ns foo.core)
(def ^:dynamic *debug-fn*
"A function taking arguments [bar baz]"
nil)
(defn bar-info
[bar _]
(println bar))
(defn baz-info
[_ baz]
(println baz))
(defn do-stuff
[bar baz]
(when *debug-fn* (*debug-fn* bar baz)))
(defn -main
[& {:keys [debug-fn]}]
(binding [*debug-fn* (symbol debug-fn)] ;; THIS WON'T WORK!
(do-stuff 27 42)))
Run Code Online (Sandbox Code Playgroud)
我想要做的是允许从命令行指定调试函数,如下所示:lein run bar-info或lein run baz-info.
我不确定如何将指定的字符串作为命令行参数,并将其转换为要绑定的名称空间限定函数.我需要一个宏来做这个吗?
我一直在测试我的持续部署设置,试图获得一组最小的IAM权限,这将允许我的CI IAM组部署到我的"staging"Elastic Beanstalk环境.
在我的最新测试中,我的部署陷入困境.控制台中的最后一个事件是:
Updating environment staging's configuration settings.
Run Code Online (Sandbox Code Playgroud)
幸运的是,部署将在30分钟后超时,因此可以再次部署环境.
这似乎是一个权限问题,因为如果我授予s3:*所有资源,则部署可以正常工作.似乎在调用UpdateEnvironment时,Elastic Beanstalk对S3做了一些事情,但我无法弄清楚是什么.
我尝试了以下策略来授予EB对其资源桶的完全访问权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/_runtime/_embedded_extensions/APP",
"arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/_runtime/_embedded_extensions/APP/*",
"arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/environments/ENV_ID",
"arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/environments/ENV_ID/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
其中REGION,ACCOUNT,APP,和ENV_ID是我的AWS区域,账号,应用程序名称和环境ID,分别.
有没有人知道S3动作和资源EB试图访问哪些?