我无法理解,为什么如果我们在头文件中定义普通(非模板)类的静态变量,我们有链接器错误,但是在模板的情况下一切正常,而且我们将在所有翻译单元中有单个静态变量实例:
它是模板头(template.h):
// template.h
template<typename T>
class Templ {
public:
static int templStatic;
};
template<typename T> Templ<T>::templStatic = 0;
Run Code Online (Sandbox Code Playgroud)
它是第一个使用模板的单元(unit1.cpp)
// unit1.cpp
#include "template.h"
int method1() {
return Templ<void>::templStatic++;
}
Run Code Online (Sandbox Code Playgroud)
这里的第二个单位(unit2.cpp):
// unit2.cpp
#include "template.h"
int method2() {
return Templ<void>::templStatic++;
}
Run Code Online (Sandbox Code Playgroud)
最后,main.cpp:
// main.cpp
#include <iostream>
int method1();
int method2();
int main(int argc, char** argv) {
std::cout << method1() << std::endl;
std::cout << method2() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在编译,链接和执行此代码后,我们将得到以下输出:
0
1
Run Code Online (Sandbox Code Playgroud)
那么,为什么在模板的情况下一切正常(和预期一样)?编译器或链接器如何处理它(我们可以在分离的编译器调用中编译每个.cpp文件,然后将它们与caling链接到链接器,因此编译器和链接器不会同时"看到"所有.cpp文件)?
PS:我的编译器:msvcpp 9(但也检查了mingw)
任何人都可以让我知道应该使用模板方法 - 模式的一些示例情况吗?
根据您自己的经验,给我一些真实的用途.
(到目前为止,我发现它仅用于映射DA层中的数据.抱歉!!!)
我安装了debian lenny,但我很惊讶我无法获取系统调用的手册页(man 2 read等等)
我该如何安装它们?
如何将日志写入大小为64KB的文件(允许记事本读取).一旦文件达到64KB,它应该开头创建另一个,另一个......文件名可以自动生成.
我尝试了以下代码
static int iCounter=1;
CString temp;
static CStdioFile f(L"c:\\Log1.txt", CFile::modeWrite | CFile::modeRead | CFile::modeCreate | CFile::modeNoTruncate);
int nlength = (int)f.GetLength();
if(nlength>(nMaxFileSize*1024))
{
//need to create a new file
f.Close();
iCounter++;
temp.Format(_T("%s%d%s"), "c:\\Log",iCounter, ".txt");
f.Open(temp,CFile::modeWrite | CFile::modeRead | CFile::modeCreate | CFile::modeNoTruncate);
}
f.SeekToEnd();
f.WriteString(str);
f.WriteString(L"\r\n");
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个更好的选择.
为什么会这样?问题是监视器对象肯定不是null,但我们仍然经常得到这个异常:
java.lang.IllegalMonitorStateException: (m=null) Failed to get monitor for (tIdx=60)
at java.lang.Object.wait(Object.java:474)
at ...
Run Code Online (Sandbox Code Playgroud)
引发这种情况的代码是一个简单的池解决方案:
public Object takeObject() {
Object obj = internalTakeObject();
while (obj == null) {
try {
available.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
obj = internalTakeObject();
}
return obj;
}
private Object internalTakeObject() {
Object obj = null;
synchronized (available) {
if (available.size() > 0) {
obj = available.keySet().iterator().next();
available.remove(obj);
synchronized (taken) {
taken.put(obj, Boolean.valueOf(true));
}
}
}
return obj;
}
public void returnObject(Object …Run Code Online (Sandbox Code Playgroud) 我有一个带有HTML/CSS前端的asp.net Web应用程序.这一切都运行正常,但在Internet Explorer 6中,我在网站中使用的透明PNG由于此特定浏览器的设计不佳而不透明.
我已经尝试了各种不起作用的IE6 PNG透明度修复程序.
当网站检测到浏览器是IE6时,我考虑过使用GIF图像替换.我没有任何javascript经验,但有人提到我可以使用javascript上的"document.write()"功能,将IEG替换为使用IE6作为浏览器时相同图像的GIF.
请有人向我解释我将如何做到这一点?记住我对C#等有所了解,但没有javascript知识.我只是刚刚开始作为Web开发人员这么简单的解释会对我有很大的帮助.
谢谢您的帮助.问候.
在Java中,我们可以导入单个类以及整个类(包).
举个例子
import java.util.*
Run Code Online (Sandbox Code Playgroud)
包括
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import java.util.Iterator;
import java.util.Map;
Run Code Online (Sandbox Code Playgroud)
除了代码的长度,以任何方式使用每种方法有什么特别的优势吗?内存分配?性能?
我们需要使用正则表达式解析一个字符串,该字符串可以是:
XXX可以是任何字符(例如".")
我们如何制作匹配的正则表达式:
我试过的每一个正则表达式都在第一场比赛中捕获了所有内容(因为贪婪或太少因为不贪心)
我知道这是进步,但也许有人已经做到了.
我想隐藏任务栏条目以最大化有效空间,因为应用程序有一个系统托盘图标,我不需要任务栏条目.该应用程序不允许您只有一个系统而不是两者.
如何隐藏任务栏条目但保留窗口形式?
我有一个Lucene索引,其中包含具有"类型"字段的文档,该字段可以是"文章","论坛"或"博客"三个值中的一个.我希望用户能够在这些类型中进行搜索(每个文档类型都有一个复选框)
如何根据用户选择的类型创建Lucene查询?
一些先决条件是:
如果我在SQL中写这个(对于"博客或论坛搜索")我会写:
SELECT * FROM Docs
WHERE [type] in ('blog', 'forum')
Run Code Online (Sandbox Code Playgroud) c++ ×2
java ×2
debian ×1
file-io ×1
import ×1
javascript ×1
linux ×1
locking ×1
logging ×1
lucene ×1
lucene.net ×1
manpage ×1
pool ×1
regex ×1
static ×1
taskbar ×1
templates ×1
visual-c++ ×1
windows-xp ×1