我想有一个模板类(如float/double类型),但我使用Nvidia的CUDA和Optix公司和有多个其他类型(例如float2,double2,float3,...)依赖于所选择的模板类型。
像这样的东西:
#include <optixu/optixu_vector_types.h>
#include <type_traits>
template <class T>
class MyClass
{
MyClass()
{
if (std::is_same<T, float>::value)
{
typedef optix::float2 T2;
}
else if (std::is_same<T, double>::value)
{
typedef optix::double2 T2;
}
T2 my_T2_variable;
}
void SomeFunction()
{
T2 another_T2_variable;
};
};
Run Code Online (Sandbox Code Playgroud)
我现在的解决方案是有多个模板参数MyClass<T,T2,T3> my_object;,但这似乎有太多的开销和混乱。有没有办法使用上述所需的单个模板参数实现相同的目标?
我有一个如下所示的目录布局
projectA/
|-- CMakeLists.txt
|-- src/
|-- main.cpp
projectB/
|-- CMakeLists.txt
|-- src/
|-- file1.cpp
|-- file1.hpp
|-- file2.hpp
|-- main.cpp
|-- third_party/
|-- include
|-- lib1
Run Code Online (Sandbox Code Playgroud)
我在 Qt Creator 中成功打开了这两个项目(使用 Ctrl+O 并打开CMakeLists.txt文件),它们能够独立构建和运行。
我需要访问file1.Xpp和file2.hpp从projectA. Qt Creator 有没有办法projectB在projectA. 人们可能会记住这一点,file1.Xpp并且file2.hpp可能依赖于第三方库。
使用Ctrl+N-> Other Project->Subdirs Project我可以添加一个子项目,但如果我没记错的话,只能添加一个空的。
在声明中看起来像这样的东西是不可能的:
void func(float a, int b=int(a+1)){/*do stuff*/}
Run Code Online (Sandbox Code Playgroud)
基本上,我想要默认值b取决于a.除了重载之外,还有适当的解决方法func吗?
我从0到999得到了数字.我怎样才能实现以下目标
int i = 123;//possible values 0-999
char i_char[3] = /*do conversion of int i to char and add 3 leading zeros*/
Run Code Online (Sandbox Code Playgroud)
示例:i_char看起来像是"001"for i=1,"011"for i=11或"101"fori=101