我看到两个不同的模板类声明:
template <class T> class SampleClass1
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
和
template <typename T> class SampleClass2
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
这两个代码有什么区别?
编辑:我将错误的关键字"typedef"更正为"typename".
在标准C++中,我们有char和wchar_t存储字符.char可以存储0x00和0xFF之间的值.并且wchar_t可以在0x0000和之间存储值0xFFFF.std::string使用char,因此它只能存储1个字节的字符.std::wstring使用wchar_t,因此它可以存储最多2个字节宽度的字符.这就是我对C++中字符串的了解.如果到目前为止我说错了,请纠正我.
我在维基百科上阅读了UTF-8的文章,我了解到一些Unicode字符占用的空间最多为4个字节.例如,汉字有一个Unicode代码点0x24B62,它占用内存中的3字节空间.
是否有一个STL字符串容器来处理这些字符?我正在寻找类似的东西std::string32.此外,我们有main()ASCII入口点,wmain()对于具有16位字符支持的入口点; 我们使用3和4字节Unicode支持的代码的入口点是什么?
你能加一个小例子吗?
(我的操作系统:Windows 7 x64)
我知道ExitWindowsEx()API函数只关闭Windows.但据我所知,你不能让Windows安装任何挂起的更新.
是否有任何API支持安装任何挂起的更新(在标准的蓝屏中说" 已经安装了m个更新 - 请不要关闭或拔掉你的电脑,Windows将自行关闭 ")然后关闭Windows(相当于单击Windows用户界面的"安装更新和关闭"菜单选项)?
(操作系统版本:Windows XP及更高版本.)
我有一个Matrix类,它有*标量和矩阵乘法的重载运算符.
template <class T> class Matrix
{
public:
// ...
Matrix operator*(T scalar) const;
// ...
}
// ...
template <class T>
Matrix<T> Matrix<T>::operator*(T RightScalar) const
{
Matrix<T> ResultMatrix(m_unRowSize, m_unColSize);
for (uint64_t i=0; i<m_unRowSize; i++)
{
for (uint64_t j=0; j<m_unColSize; j++)
{
ResultMatrix(i, j) = TheMatrix[m_unColSize * i + j] * RightScalar;
}
}
return ResultMatrix;
}
// ...
Run Code Online (Sandbox Code Playgroud)
我可以将矩阵对象与右侧的标量相乘而没有任何问题:
Matrix<double> X(3, 3, /* ... */); // Define a 3x3 matrix and initialize its contents
Matrix<double> …Run Code Online (Sandbox Code Playgroud) c++ templates operator-overloading member-functions non-member-functions
我有一个成员函数,它将一个常量引用参数带到另一个对象.我想const_cast这个参数,以便在成员函数中轻松使用它.为此,以下哪个代码更好?:
void AClass::AMember(const BClass & _BObject)
{
// FORM #1 - Cast as an object:
BClass BObject = const_cast<BClass &>(_BObject);
// ...
}
void AClass::AMember(const BClass & _BObject)
{
// FORM #2 - Cast as a reference:
BClass & BObject = const_cast<BClass &>(_BObject);
// ...
}
Run Code Online (Sandbox Code Playgroud)
你能比较这两种形式吗?在速度和内存使用标准方面哪一个更好?
我想调用一个库函数,其签名是:
bool WriteBinary(const std::vector<uint8_t> & DataToWrite);
Run Code Online (Sandbox Code Playgroud)
我有一个std::string变量,我想把它作为参数发送给它.
void WriteString(const std::string & TextData)
{
// ...
WriteBinary(TextData); // <-- How to make this line work?
// ...
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以直接发送std::string变量而无需复制它?
我正在尝试将非静态类成员绑定到标准WNDPROC函数.我知道我可以通过使类成员静态来做到这一点.但是,作为一名C++ 11 STL学习者,我对使用<functional>标题下的工具非常感兴趣.
我的代码如下.
class MainWindow
{
public:
void Create()
{
WNDCLASSEXW WindowClass;
WindowClass.cbSize = sizeof(WNDCLASSEX);
WindowClass.style = m_ClassStyles;
WindowClass.lpfnWndProc = std::function<LRESULT(HWND, UINT, WPARAM, LPARAM)>
( std::bind(&MainWindow::WindowProc,
*this,
std::placeholders::_1,
std::placeholders::_2,
std::placeholders::_3,
std::placeholders::_4));
WindowClass.cbClsExtra = 0;
WindowClass.cbWndExtra = 0;
WindowClass.hInstance = m_hInstance;
WindowClass.hIcon = LoadIconW(m_hInstance, MAKEINTRESOURCEW(IDI_WINDOW));
WindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WindowClass.hbrBackground = (HBRUSH) COLOR_WINDOW;
WindowClass.lpszMenuName = MAKEINTRESOURCEW(IDR_MENU);
WindowClass.lpszClassName = m_ClassName.c_str();
WindowClass.hIconSm = LoadIconW(m_hInstance, MAKEINTRESOURCEW(IDI_WINDOW_SMALL));
RegisterClassExW(&WindowClass);
m_hWnd = CreateWindowEx(/*_In_ DWORD*/ ExtendedStyles,
/*_In_opt_ LPCTSTR*/ m_ClassName.c_str(),
/*_In_opt_ LPCTSTR*/ m_WindowTitle.c_str(),
/*_In_ …Run Code Online (Sandbox Code Playgroud) int main()
{
const int ia = 10;
int *pia = const_cast<int*>(&ia);
*pia = 5;
std::cout << &ia << "\t" << pia <<endl;
std::cout << ia << "\t" << *pia <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
0x28fef4 0x28fef4
10 5
Run Code Online (Sandbox Code Playgroud)
*pia并ia具有相同的地址,但它们具有不同的值.我的目的是用来const_cast修改一个常量值,但结果显示它不起作用.
有谁知道为什么?
我重新安装了Code :: Blocks(我安装了一个用于Windows 7的GCC编译器(codeblocks-10.05mingw-setup.exe)).然后我尝试编译这个非常简单的代码:
int wmain(int argc, wchar_t* argv[])
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
C:\研发\ IDE \代码块\ MinGW的\ BIN ..\LIB\GCC \的mingw32\4.4.1 ......\libmingw32.a(main.o),此:main.c中|| 未定义的引用`WinMain @ 16'| || ===构建完成:1个错误,0个警告=== |
当我尝试使用main()条目运行我的代码时,它会按预期运行而不会出现任何错误或警告.我如何wmain()在我的代码中使用?我需要做哪些修改?