我已经实现了一个非常基本的"插件系统"作为静态库的一部分.每个"插件"都实现了对特定图像格式的支持,例如GIF,JPEG等.此外,我还有一个Singleton(一个叫做的类PluginManager),它保存了所有可用插件的列表.
棘手的部分是我想通过在项目文件中添加或删除源文件来禁用/启用插件.为实现此目的,每个插件都会创建一个全局变量(具有不同的名称),并在该类的构造函数中注册该插件PluginManager.
对于JPEG格式,这样的东西......
struct JPEGPlugin
{
// constructor will register plugin
JPEGPlugin()
{
PluginManager::Singleton().RegisterPlugin(this);
}
// plenty of other code
...
};
JPEGPlugin jpeg_instance; // instantiate in global scope
Run Code Online (Sandbox Code Playgroud)
然而,虽然这在理论上完美地起作用,但是当将该静态库链接到其他代码以构建可执行文件时它会失败.只要此可执行文件不访问插件全局变量(如jpeg_instance),链接器就不会看到连接(他完全忽略了构造函数的副作用),并且不包含最终可执行文件中的代码.换句话说,JPEG插件在最终应用程序中不可用.
多年来我遇到过几次问题,我总是在网上寻找解决方案.每次,我只是发现页面基本上说这是一个已知的问题,我必须忍受它.
但也许有人知道如何让这个工作?
我已经添加了php作为Apache 2.2.11的模块:
LoadModule php5_module "c:/php/php5apache2_2.dll"
Run Code Online (Sandbox Code Playgroud)
并补充说
AddType application/x-httpd-php .php
Run Code Online (Sandbox Code Playgroud)
在PHP.ini中,我的扩展名dir设置为: extension_dir = "C:\php\ext"
而且是,目录是正确的,所有文件确实存在.
但是当我启动apache时,我收到了以下错误:
PHP警告:PHP启动:无法加载动态库'C:\ php\ext\php_mysql.dll' - 无法找到指定的模块.\ r \n在第0行的未知中
PHP警告:PHP启动:无法加载动态库'C:\ php\ext\php_pdo_pgsql.dll' - 无法找到指定的模块.\ r \n在第0行的未知中
PHP警告:PHP启动:无法加载动态库'C:\ php\ext\php_pgsql.dll' - 无法找到指定的模块.\ r \n在第0行的未知中
[Sun May 17 03:46:01 2009] [通知] Apache/2.2.11(Win32)PHP/5.2.9 -2配置 - 恢复正常操作
[Sun May 17 03:46:01 2009] [通知]服务器内置:2008年12月10日00:10:06
[Sun May 17 03:46:01 2009] [通知]父级:创建子进程4652
PHP警告:PHP启动:无法加载动态库'C:\ php\ext\php_mysql.dll' - 无法找到指定的模块.\ r \n在第0行的未知中
PHP警告:PHP启动:无法加载动态库'C:\ php\ext\php_pdo_pgsql.dll' - 找不到指定的模块.\ r \n 在第0行的Unknown中
PHP警告:PHP启动:无法加载动态库'C:\ php\ext\php_pgsql.dll' - 找不到指定的模块.\ r \n在第0行的Unknown中
[Sun May 17] 03:46:01 …
例如,在文件中test.php:
<a href="someting/?start=1">go</a>;
Run Code Online (Sandbox Code Playgroud)
所以无论在何处test.php,无论是在Document_Root/Test/目录中还是在Document_Root/Production/目录中,锚都将指向自身.
GitPython是一种与python中的git交互的方式.我正在尝试git commit -m "message"从这个模块访问基本的git命令(例如),根据这个命令应该通过Git模块访问.这是我到目前为止尝试使这些命令工作的原因:
>>> import git
>>> foo = git.Git("~/git/GitPython")
>>> bar = "git commit -m 'message'"
>>> beef = git.Git.execute(foo,bar)
Run Code Online (Sandbox Code Playgroud)
这显示错误,表示没有此类文件或目录.我也尝试了以下作为我的git目录的路径:
~/git/GitPython/.git
/Users/bacon/git/gitclient/
唯一的另一个选择是该命令是错误的,所以我尝试了:
commit -m "message"同样,仍然得到"没有这样的文件或目录".
我需要做些什么才能使这些git命令正常工作?
我只是想知道,将类分成.h和.cpp文件的重点是什么?这使得它更难编辑,如果你的类不会被编译成的.lib或.dll外部使用,有什么意义呢?
编辑:我问的原因是Boost库将所有内容都放在.hpp文件中(大多数库都是这样),我想知道为什么它在我看到的大多数其他代码中都是分开的.
用PHP
echo (int) ( (0.1+0.7) * 10 );
Run Code Online (Sandbox Code Playgroud)
或者在Ruby中
p ((0.1+0.7) *10).to_i
Run Code Online (Sandbox Code Playgroud)
结果是7而不是8.可能真的很难抓住这些陷阱.我认为,如果在北美,它不是一个问题,因为我们计算价格高达多少美分,所以17.28美元或17.29美元可能不是一个问题.但在中国或香港这样的国家,价格可能只是一个整数.在这种情况下,如果我们的程序很慷慨,只是询问客户价格的整数部分,那么如果8变为7就会出现问题.所以也许我们总是需要小心并使用round()代替?任何其他方法避免这个陷阱?
如何在C++中将vartiables值转换为其他名称?就像在这个PHP片段.
$string = 'testVar';
${$string} = 'test';
echo $testVar; // test
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我想使用'y'的div来匹配div的高度和3'x'.
<div style="border: 0px solid red; margin: 0px 0px 5px; overflow: hidden;">
<div style="border: 1px solid rgb(129, 11, 0); margin: 0px; padding: 5px; background-color: rgb(30, 23, 22); width: 312px; float: left;">
x<br/>x<br/>x
</div>
<div style="border: 1px solid rgb(129, 11, 0); margin: 0px; padding: 5px; width: 312px; background-color: rgb(30, 23, 22); float: right;">
y
</div>
Run Code Online (Sandbox Code Playgroud)
需要注意的是内部div是浮动的.
什么是一种简单/有效的方法将一组单词与一个空格组合在一起,但之前或之后没有空格?
我想在循环中组合所有内容后可以删除空格(类似于sum + =(term +""))......我不喜欢它.
最好是Java,Python或Ruby代码.
我有个问题
例如,当我在方法中声明变量时会发生什么.
void myMethod() {
Ship myShip = new Ship();
}
在堆栈或堆中分配myShip引用的位置在哪里?
我认为在堆栈中我很困惑,因为我正在阅读J2ME游戏编程书"Java类被实例化到Java堆上"
所有的java clases?
提前致谢