在Phoenix中处理多态关联的推荐方法似乎是添加一个包含对其他模式的引用的中间模式:
所以,如果我想用不同种类的动物创建模式,我会这样做:
defmodule Animal do
use Ecto.Model
schema "animals" do
belongs_to(:dog, Dog)
belongs_to(:cat, Cat)
belongs_to(:owner, PetOwner)
end
end
defmodule Dog do
use Ecto.Model
schema "dogs" do
end
end
defmodule Cat do
use Ecto.Model
schema "cats" do
end
end
defmodule PetOwner do
use Ecto.Model
schema "pet_owners" do
has_one(:pet, Animal)
end
end
Run Code Online (Sandbox Code Playgroud)
但我也可以使用PetOwner包含二进制字段和类型的模式:
defmodule Dog do
use Ecto.Model
schema "dogs" do
end
end
defmodule Cat do
use Ecto.Model
schema "cats" do
end
end
defmodule PetOwner do
use …Run Code Online (Sandbox Code Playgroud) 我正在用CMake生成一个.sln.我想使用Google Test并使用这种代码添加新测试:
add_executable(my_test test/my_test.cpp)
target_link_libraries(my_test gtest gmock_main)
add_test(NAME my_test COMMAND my_test)
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是当我打开我的.sln时,我将所有目标都出现在解决方案资源管理器中:库,单元测试等.
有没有办法隐藏这些目标?
我试图在使用关键字时获得预期的行为inline.我尝试在不同的文件中调用函数,模板化函数,使用内联函数的不同实现,但无论我做什么,编译器都不会内联函数.
那么在哪种情况下,编译器是否会选择在C++中内联函数?
这是我尝试过的代码:
inline auto Add(int i) -> int {
return i+1;
}
int main() {
Add(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到:
Add(int):
pushq %rbp
movq %rsp, %rbp
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
addl $1, %eax
popq %rbp
ret
main:
pushq %rbp
movq %rsp, %rbp
movl $1, %edi
call Add(int)
movl $0, %eax
popq %rbp
ret
Run Code Online (Sandbox Code Playgroud)
或者,
template<typename T>
inline auto Add(const T &i) -> decltype(i+1) {
return i+1;
}
int main() {
Add(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到了: …