在C++中使用C和plain函数,我可以使用static关键字阻止函数的符号输出:
static int foo(int a, int b) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
但在一个类中,定义一个函数static具有完全不同的含义.有没有办法确保编译器我的整个类只能在模块中使用,而且不需要导出它的任何方法的符号?
我已经开始学习Haskell,并阅读Learn You Haskell.第8章处理"制作我们自己的类型和类型类",我有一个错误信息,这对我来说是一个问题.可能解决方案是一个小问题,但我找不到它,所以请揭示提示,或者帮我解释一下.
data Person = Person { firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq, Show, Read)
mikeD = Person {firstName = "Michael", lastName = "Diamond", age = 43}
main = print $ read "Person {firstName =\"Michael\", lastName =\"Diamond\", age = 43}" :: Person
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息
Couldn't match expected type `Person' with actual type `IO ()'
In a stmt of a 'do' block:
print
$ read
"Person {firstName =\"Michael\", lastName =\"Diamond\", age = 43}" …Run Code Online (Sandbox Code Playgroud) 我想知道如果不使用另一个变量就可以将push_back变量变成a std::vector.很长一段时间我一直这样做:
std::vector<int> v;
int temp;
std::cin >> temp;
v.push_back(temp);
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能在一行中做同样的事情:
v.push_back(READING_HERE);
Run Code Online (Sandbox Code Playgroud) 我想做这样的事情:
void func(void *data, const int dtype)
{
typedef typename std::conditional<dtype==0,float,double>::type DataType;
funcT((DataType *)data);
return;
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为dtype需要在编译时知道.我试图避免使用switch语句,因为我正在使用8个数据类型,有许多函数,如上面的那些,通过ctypes从Python调用.
有没有像std :: conditional这样的方法可以在运行时完成,利用传入的dtype标识符?
对于c ++ 20,建议为通用lambdas p0428r2.pdf添加以下语法
auto f = []<typename T>( T t ) {};
Run Code Online (Sandbox Code Playgroud)
但是gcc 8中的当前实现不接受以下实例化:
f<std::string>("");
Run Code Online (Sandbox Code Playgroud)
这是gcc中的实现错误还是缺少语言功能?我知道我们谈的是提案,而不是批准的规范.
完整示例(与模板函数语法比较):
template <typename T> void n( T t ) { std::cout << t << std::endl; }
auto f = []<typename T>( T t ) { std::cout << t << std::endl; };
int main()
{
f<std::string>("Hello"); // error!
n<std::string>("World");
}
Run Code Online (Sandbox Code Playgroud)
抱怨以下错误:
main.cpp:25:22:错误:在'>'标记f之前的预期primary-expression("Hello");
我知道当我们使用new/new []分配内存时,我们应该分别使用delete/delete []来释放内存.
这是问题,
我可以使用delete []来释放new分配的内存吗?
例如,
int *pInt3 = new int;
delete [] pInt3;
pInt3 = NULL;
T *pT3 = new T;
delete [] pT3;
pT3 = NULL;
Run Code Online (Sandbox Code Playgroud)
谢谢
我\t用来分隔我的输出,但它产生不一致的空格.
例如,以下代码生成
#include <iostream>
int main()
{
std::cout << "Terms\tResults\tet(%)\tea(%)\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Terms Results et(%) ea(%)
注意空间的差异
为什么会这样?
我创建了具有ACTIVE BOOL的基类
class BaseTest{
public:
bool active = false;
BaseTest(){
// make most true
if ( getRand(0, 5) != 2){
active = true;
}
}
};
Run Code Online (Sandbox Code Playgroud)
创建两个不同的子类
class ChildTest_1: public BaseTest{
string child1 = "Is child 1";
public:
ChildTest_1(){
}
};
class ChildTest_2: public BaseTest{
string child2 = "Is NOT child 1";
public:
ChildTest_2(){
}
};
Run Code Online (Sandbox Code Playgroud)
我希望能够将子(或带有"ACTIVE"的任何向量)传递给此函数,它将返回第一个非活动状态.我有一个程序,它运行许多对象的很多向量,并且通常有一个管理每个对象向量的类.在每个mgmt类中编写此循环正在变得痛苦和浪费重复的代码.我想要一个我可以传递任何具有活动var的对象的向量.
我现在不需要排序,但这是我所需要的最接近的术语.
我需要的是一个函数,我可以传递一个向量,它将返回第一个非活动对象;
如果它们不需要共享基类,只要向量中的每个对象都有自己的ACTIVE bool,那就更好了,但是我也可以创建一个简单的基类,它都可以从中派生出来.
int firstInactive(vector<BaseTest> & test ){
for ( int cnt = 0 ; cnt < test.size() ; cnt++ ){
if …Run Code Online (Sandbox Code Playgroud) 我有一个泛型Matrix类,我有两个版本operator(),一个const方法返回索引的const引用,一个非const方法返回索引的非const引用(允许我更改它.
我试图通过使用const_cast并调用const版本来使用非const版本,但由于某种原因它不起作用:
template<typename T>
class Matrix
{
std::vector<T> _matrix;
unsigned int _rows;
unsigned int _cols;
public:
const T& operator()(unsigned int row, unsigned int col) const
{
return _matrix[col + (_cols * row)];
}
T& operator()(unsigned int row, unsigned int col)
{
return const_cast<T&>(static_cast<const Matrix*> (*this).operator(row, col));
}
};
Run Code Online (Sandbox Code Playgroud)
它不允许我在最后一行向操作符添加(row,col).有任何想法吗?