我知道如何使用模板的任何数据类型:
template<typename T>
T myFunc(T data) { ... }
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法设定的允许的类型缩小到例如int和char或std::string和std::wstring,所以编译器将抛出一个错误,遇到不允许参数类型的时候,我会得到编译时间,而不是运行时错误?
编辑:非常感谢ecatmur,现在我理解了整个概念.
template<typename itemA_type, typename itemB_type>
typename std::enable_if<
(
std::is_same<itemA_type, int>::value ||
std::is_same<itemA_type, char>::value) &&
(
std::is_same<itemB_type, std::string>::value ||
std::is_same<itemB_type, std::wstring>::value ||
std::is_same<itemB_type, const char*>::value ||
std::is_same<itemB_type, const wchar_t*>::value
) ,
void
>::type
myFunction(itemA_type itemA, itemB_type itemB) {
using namespace std;
cout << itemA << itemB << endl;
}
Run Code Online (Sandbox Code Playgroud) 当用户提出类似问题但没有回答时,我发现只有这个帖子.(https://github.com/npm/npm-registry-couchapp/issues/17)
我知道两个站点是NPM包的存储库:
而且我找不到像github或sourceforge那样获取单个包的rss的方法:
https://github.com/<author_name>/<package_name>/releases.atomhttp://sourceforge.net/projects/<project_name>/rss?limit=20是的,我知道我可能会检查给定NPM的github存储库是什么,并以这种方式执行,但我特别要求从某种NMP存储库中获取此信息的方法,该存储库跟踪给定包是否更改了其git地址(不一定这两个我在这里作为例子添加.)
谷歌很难找到这些技巧,因为它认为我正在寻找某种处理RSS/ATOM的NPM包.
是否有最新版本的PHP中的功能,专门用于帮助完成此任务?
我在这里尝试做的是创建一个函数,每次调用它时都会将相同的输入加密为完全不同的输出.这个函数的基础是xor,但是为了防止在字符串中容易发现重复模式.我根据时间和字符串的一部分添加了随机散列,以便在解密时进行自我验证.
我要求的是,如果我在这里犯了任何错误,可以向有经验的人透露隐藏的文字而不对字符串施加暴力.(我知道php有一个模块只是用于加密,但这是一个糟糕的勒芒版本,以防加密模块不可用.)第二:我不要求你重写这个功能或为我写一些东西,我要求的是我做错了一个简单的指导.我知道一个可能的安全漏洞是我默认使用salsa,这对于空字符串都是零,但优点是这是php中可用的最长哈希,其次,傻瓜会使用空密码来保护他们的数据?
function crapt($str,$pass,$hmac = false,$meth = 'salsa20') {
$hash = pack('H*',($hmac===false) ? hash($meth,$pass) : hash_hmac($meth,$pass,$hmac));
$str = gzdeflate($str,9);
$tmphash = pack('H*',sha1(sin(microtime(1))));
$str = $tmphash.((string)$str ^ (string)str_repeat($tmphash,strlen($str)/strlen($tmphash)+1));
$str .= pack('H*',sha1($str));
return (string)$str ^ (string)str_repeat($hash,strlen($str)/strlen($hash)+1);
}
function decrapt($str,$pass,$hmac = false,$meth = 'salsa20') {
$hash = pack('H*',($hmac===false) ? hash($meth,$pass) : hash_hmac($meth,$pass,$hmac));
$str = (string)$str ^ (string)str_repeat($hash,strlen($str)/strlen($hash)+1);
$check = substr($str,-20);
$str = substr($str,0,strlen($str)-20);
if(pack('H*',sha1($str))!==$check) return false;
$tmphash = substr($str,0,20);
$str = substr($str,20);
return gzinflate((string)$str ^ (string)str_repeat($tmphash,strlen($str)/strlen($tmphash)+1));
}
var_dump(decrapt(crapt('sometext','secretpassword'),'secretpassword'));
Run Code Online (Sandbox Code Playgroud) session_start();
$_SESSION['dbo'] = NEW PDO('sqlite:database.db3');
Run Code Online (Sandbox Code Playgroud)
得到:
Fatal error: Exception thrown without a stack frame in Unknown on line 0
但把它放到普通变量没有错误.我尝试做的就是将对象放入会话中,以便初始化一次.
也许有一些设置可以在扩展上下文中禁用它.由于我正在开发一个扩展,我自己的责任是不要射击我自己的目标.在开发浏览器扩展时,完全不合理的安全事项是非常令人沮丧的.
我不想通过全局禁用它来使整个浏览器不安全.仅适用于manifest.json中"content_scripts"部分中设置的脚本
好的,我知道如何分别做这两件事:
#elemID { } /* selects only one element */
#elemID * { } /* selects all its children elements but not the element itself */
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
#elemID, #elemID * { }
Run Code Online (Sandbox Code Playgroud)
但有没有办法避免这种重复?
在正则表达式中它会是0x[0-9a-fA-F]+,但如何在纯c ++中实现它?
#include <stdio.h>
#include <windows.h>
using namespace std;
int main() {
char s[] = "Hello\n";
HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
unsigned long cChars;
WriteConsole(stdout, s, lstrlen(s), &cChars, NULL);
}
Run Code Online (Sandbox Code Playgroud)
结果: error: declaration of '_iob' as array of references
但是当我评论出来时stdio.h,它编译好了.这有什么不对?
编译器是MinGW.
#include <iostream>
#include <fstream>
#define _WIN32_WINNT 0x501
#include <windows.h>
using namespace std;
HHOOK hKeyboardHook = 0;
LRESULT CALLBACK KeyboardCallback(int code,WPARAM wParam,LPARAM lParam) {
cout << "a key was pressed" << endl;
ofstream myfile;
myfile.open ("hookcheck.txt", ios::ate | ios::app);
myfile << "a key was pressed\n";
myfile.close();
return CallNextHookEx(hKeyboardHook,code,wParam,lParam);
}
int main() {
HWND consoleWindow = GetConsoleWindow();
HINSTANCE hInstCons = (HINSTANCE)GetWindowLong( consoleWindow, GWL_HINSTANCE );
hKeyboardHook = SetWindowsHookEx( WH_KEYBOARD, (HOOKPROC)KeyboardCallback, (HINSTANCE)consoleWindow, GetCurrentThreadId());
MessageBox(NULL, "It is keyboard time!", "Let's Go", MB_OK);
}
Run Code Online (Sandbox Code Playgroud)
循环进行时每次按键时此代码都应该在控制台上打印消息并创建一个文件,但什么也没发生.我错了什么?