当使用 CMake 构建我的项目时,我希望它静态链接到库(如果可用)。现在,.dll.a
无论文件是否存在,它都会查找.a
文件。
例如,在一个小示例项目中链接到 libpng:
cmake_minimum_required(VERSION 3.15)
project(Test)
add_executable(Test main.cpp)
find_package(PNG REQUIRED)
message(${PNG_LIBRARIES})
target_link_libraries(Test PRIVATE ${PNG_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
对于message
,它输出
C:/msys64/mingw64/lib/libpng.dll.aC:/msys64/mingw64/lib/libz.dll.a
但libpng.a
和libz.a
文件也可以在同一目录中使用。我如何告诉 CMake 链接.a
文件?
我在 Windows 10 上使用 MinGW-w64 和 msys64,但更喜欢跨平台的解决方案。
我想知道是否有可能有这样的事情:
public class foo<T...>
Run Code Online (Sandbox Code Playgroud)
所以你可以像上课那样打电话
Foo<Object0>
Foo<Object0, Object1>
Foo<Object0, Object1, Object2>
Run Code Online (Sandbox Code Playgroud)
使用Object 0,1和2两种不同的类型,如Integer,Float,String等.这是可能的,还是我必须为每种类型的泛型类型编写一个类?如果可以,我将如何处理不同的类型?
我想将从文件中获取的字符串转换为arraylist.我试过这种方式,但它不起作用:
import java.io.*;
import java.util.*;
public class Data
{
static File file = DataSaver.file;
static List<String> data = new ArrayList<String>(512);
public static void a() throws Exception
{
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
BufferedReader reader = new BufferedReader(new InputStreamReader(dis));
if(!file.exists())
{
throw new IOException("Datafile not found.");
}
else
{
String[] string = reader.readLine().split("$");
for(int i = 0; i < string.length; i++)
{
data.add(string[i]);
}
}
dis.close();
System.out.println(data.toString()); //for debugging purposes.
}
}
Run Code Online (Sandbox Code Playgroud)
输出继电器:
[$testdata1$testdata2$]
通缉输出:
[testdata1, …
我想在a中存储具有相同基类的多个类std::vector
.经过一些研究,我很明显我必须使用指针来防止对象切片.但是,当我创建向量时,向其添加元素并返回它,结果向量没有正确的值.
举个例子,这是我的两个类:
class Base {
public:
int var0;
}
class Derived : public Base {
public:
int var1;
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的print
功能.作为一项规则,所有实例Base
应该有var0 == 23
,和所有实例Derived
应该有var0 != 23
.
void print(Base& value) {
if (value.var0 == 23) {
std::cout << "Base: " << value.var0 << std::endl;
} else {
Derived d = (Derived&) value;
std::cout << "Derived: " << d.var0 << ", " d.var1 << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
首先,这确实像我想要的那样:
int main() …
Run Code Online (Sandbox Code Playgroud)