我目前正在尝试在我的一个项目中交换静态库,这需要交换find_package()命令以显示到静态库的显式链接.我遇到的一个问题是,即使删除了重新加载CMake项目的find_package()命令,旧的变量仍然存在.
除了手动删除Clion为构建项目而创建的临时文件夹中的所有文件之外,有没有办法显式刷新CMake缓存?
我在类中有一个看起来像这样的方法;
class SomeClass {
private $hidden = array(....);
/**
* @return array - numeric indexed array in order of $this->hidden.
* Suitable for use by list(var1, var2, ...)
*/
public function getAsList($list = array())
{
return array_values(array_intersect_key($this->hidden, array_flip($list) );
}
Run Code Online (Sandbox Code Playgroud)
但这没用,因为该方法的调用者不知道实例变量$ hidden中关联数组中键/元素对的顺序.理想情况下,返回的数组的顺序与$ list中指定的键完全相同.例如:
$foo = new SomeClass();
list($foo, $bar, $baz) = $foo->getAsList(array('foo', 'bar', 'baz');
Run Code Online (Sandbox Code Playgroud)
我可以轻松地在循环中编写一些明确的,冗长的PHP代码来执行此操作,但是有一些聪明的方法可以使用各种数组函数,例如array_multisort()在最小的代码行中吐出来(希望在编译的代码中)速度 - 我会测试它,如果重要的话).
从某种意义上说,这是一个脑筋急转弯,我还不知道答案.没有明确的循环我这样做并不重要,但我很好奇它是否可以完成.我花了大约30分钟,还没有找到解决方案.
好的,我很不耐烦.我是JetBrains PhpStorm用户,不能等待他们的C++ IDE发布.:-)他们的Objective-C IDE,Appcode,也支持C++.但我找不到一个很好的方法将一个相当大的C++项目导入Appcode,而不是一次一个地笨拙地复制文件.
创建一个将使用C++代码的现有目录结构的新Appcode项目有什么好方法?这是在Git,如果这有任何区别.
我有一个表单将structure字段作为数组发布.该structure数组包含数据库表列的定义.
$validator = Validator::make($request->all(), [
'structure' => 'required|array|min:1',
'structure.*.name' => 'required|regex:/^[a-z]+[a-z0-9_]+$/',
'structure.*.type' => 'required|in:integer,decimal,string,text,date,datetime',
'structure.*.length' => 'nullable|numeric|required_if:structure.*.type,decimal',
'structure.*.default' => '',
'structure.*.index' => 'required_if:is_auto_increment,false|boolean',
'structure.*.is_nullable' => 'required_if:is_auto_increment,false|boolean',
'structure.*.is_primary' => 'required_if:is_auto_increment,false|boolean',
'structure.*.is_auto_increment' => 'required_if:structure.type,integer|boolean',
'structure.*.is_unique' => 'required_if:is_auto_increment,false|boolean',
'structure.*.decimal' => 'nullable|numeric|required_if:structure.*.type,decimal|lt:structure.*.length',
]);
Run Code Online (Sandbox Code Playgroud)
在不对所有规则进行解释的情况下,应该确保该length字段总是null在type不存在时string或者decimal不能将长度分配给除这些类型之外的列.所以,我试图sometimes在$validator实例上使用该方法.
$validator->sometimes('structure.*.length', 'in:null', function ($input) {
// how to access the structure type here?
});
Run Code Online (Sandbox Code Playgroud)
我的问题是关闭,我该如何确保里面length是null只对具有数组元素type设置为比其他string …
我是否会失去理智,或者Postgres PDO驱动程序是否不支持预备语句,而是模仿客户端?
以下代码为prepare()调用返回NO ERROR,即使它应该.相反,它在调用execute()时返回适用的错误.
编辑:因为根据DanielVérité我错了,我添加了他建议的代码.我仍然得到错误.我的代码现在看起来如下,添加了Daniel的行.
<?php
$pdo = new PDO("pgsql:host=myhost;dbname=mydatabase");
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // as suggested by Daniel
$sth = $pdo->prepare('COMPLETE GARBAGE');
echo "[prepare] errorInfo = " . print_r($sth->errorInfo(), true);
$sth->execute();
echo "[execute] errorInfo = " . print_r($sth->errorInfo(), true);
Run Code Online (Sandbox Code Playgroud)
PHP版本5.3.15,PHP Postgres客户端版本9.1.4,Postgres服务器版本9.2.1.
为什么我收到此错误?MySQL版本有什么变化会导致这个(在某一点上工作)现在失败了吗?在INSERT INTO不指定user_ID的值会如果插入做是必需的,但由于ID 1已经存在,这应该成为一个UPDATE和有效.
mysql> select * from article;
+----+---------+---------------------+-----------+-----------+
| id | user_id | published_at | title | content |
+----+---------+---------------------+-----------+-----------+
| 1 | 1 | 2011-12-10 12:10:00 | article 1 | content 1 |
| 2 | 2 | 2011-12-20 16:20:00 | article 2 | content 2 |
| 3 | 1 | 2012-01-04 22:00:00 | article 3 | content 3 |
+----+---------+---------------------+-----------+-----------+
3 rows in set (0.00 sec)
mysql> desc article;
+--------------+------------------+------+-----+-------------------+----------------+
| Field | Type …Run Code Online (Sandbox Code Playgroud) phpstan修复此示例代码生成的错误的正确方法是什么?错误信息是:
Method Foo::foo() should return Child but returns Base.
<?php declare(strict_types = 1);
Interface MyI {abstract function a(): self;}
Class Base implements MyI {
public function a(): self {return $this;}
}
Class Child extends Base {
public function c(): self {return $this;}
}
Class Foo {
public function factory(): Child {return new Child();}
/**
* @return Child
*/
public function foo() /* note no return type */ {
return $this->factory()
->c()
->a();
}
Run Code Online (Sandbox Code Playgroud)
}
消除错误的一种方法是将其更改为@return:
/**
* …Run Code Online (Sandbox Code Playgroud) 我在 Laravel 中使用自定义查询构建器,如下所示:
class MyModel extends Model {
public function newEloquentBuilder($query): MyModelQueryBuilder
{
return new MyModelQueryBuilder($query);
}
}
Run Code Online (Sandbox Code Playgroud)
class MyModelQueryBuilder extends Illuminate\Database\Eloquent\Builder {
// various query methods...
}
Run Code Online (Sandbox Code Playgroud)
由于 Laravel 所谓的 Facades 和魔术方法的使用,PhpStorm 无法在我的自定义查询生成器中找到对这些方法的引用。
我使用barryvdh/laravel-ide-helper包为我的模型生成提示,因此它们的方法是可找到和可提示的。如何以简单、可维护的方式为我的查询生成器类执行相同的操作?
例如,我希望能够在查询生成器方法上按 Command-B,并获取该方法的用户列表,就像我可以使用其他完全交叉引用的类一样。
我有一个包含约600个目录的项目,其中包含约12个库和数十个程序的源代码。一些程序依赖于从文本文件生成的C ++头文件。
我如何干净地告诉CMake如何将生成的头文件的路径包含到那些需要它的源文件的包含路径中?
或者,在CMake尝试编译那些程序之前,如何强制将生成的文件安装到已知位置?(此想法基于当前的Makefile系统,该系统生成标头并将其安装到/ include目录中,所有源文件都可以找到该标头。)
还是有其他选择?
-编辑:添加了“玩具”示例-
本示例不起作用。我需要一种方法告诉prog1和prog2在哪里可以找到home.h。
我的树:
.
|-- prog1/
| |-- CMakeLists.txt
| `-- prog1.cpp
|-- prog2/
| |-- CMakeLists.txt
| `-- prog2.cpp
`-- share/
`-- dict/
|-- CMakeLists.txt
`-- gen.sh*
Run Code Online (Sandbox Code Playgroud)
分享/ dict:
cmake_minimum_required(VERSION 2.8.4)
project(dict)
set(SRC foo.c)
set(HEADERS foo.h home.h)
add_custom_target(home
ALL
DEPENDS ${CMAKE_INSTALL_PREFIX}/include/home.h
)
add_custom_command(
OUTPUT ${CMAKE_INSTALL_PREFIX}/include/home.h
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gen.sh gen.sh
COMMAND gen.sh ${CMAKE_INSTALL_PREFIX}
)
add_library(dict ${SRC})
install(TARGETS dict DESTINATION lib)
install(FILES ${HEADERS} DESTINATION include)
Run Code Online (Sandbox Code Playgroud)
在prog1(以及类似的prog2)中:
cmake_minimum_required(VERSION 2.8.4)
project(prog1)
add_executable(prog1 prog1.cpp)
target_link_libraries(prog1 dict) …Run Code Online (Sandbox Code Playgroud) 当然,下面的代码给出了交叉/跳转标签初始化编译错误.但是我如何获得我想要达到的效果呢?也就是说,只实例化我真正需要的类,然后一般调用所有类共有的方法?
A类和B类实际上不在我的代码中,但在我正在使用的大型库中,因此无法更改为帮助.他们不是超类的孩子(这将解决问题).
两个实际类都处理类似的数据,因此以下面说明的方式与filter()方法兼容.我知道一些可能用于使其工作的丑陋C黑客,但我正在寻找C++惯用解决方案.
在真正的问题中,有更多的代码和更多的情况,构造函数和类方法是资源密集型的,所以我不能只是"以防万一"初始化所有可能的类,然后选择正确的filter()方法用开关().
#include <string>
#include <iostream>
class A {
public:
std::string msg;
A(std::string s) { msg = s;}
void filter() { std::cout << "Message A = " << msg << std::endl;}
};
class B {
public:
std::string msg;
B(std::string s) { msg = s;}
void filter() { std::cout << "The B message: " << msg << std::endl;}
};
int main() {
int type = 1;
switch (type) {
case 1:
A f("hi from A");
break;
case 2:
B …Run Code Online (Sandbox Code Playgroud) 以下不编译。使这项工作的规范方法是什么?
let file = File::open(&args.path)?;
let reader = BufReader::new(file);
for line in reader.lines() {
if line?.contains(&args.pattern) {
println!("{}", line?);
}
}
Run Code Online (Sandbox Code Playgroud)
为了完整起见,这是错误消息:
let file = File::open(&args.path)?;
let reader = BufReader::new(file);
for line in reader.lines() {
if line?.contains(&args.pattern) {
println!("{}", line?);
}
}
Run Code Online (Sandbox Code Playgroud)